/*
	Autor:
		Ignacio Pérez Terradillos
		Analista de Administración electrónica
		Centro Internacional de Tecnologías Avanzadas
		Fundación Germán Sánchez Ruipérez
*/

( function($) {
	// Inicializa el mapa
	$.fn.POI_Init = function( data ) {
		if( !data.img ) {
			alert( 'Error: no se ha especificado una imagen.' );
			return;
		}

		if( !data.imgRealSize ) {
			alert( 'Error: no se ha especificado el tamaño real de la imagen.' );
		}
		
		data.originalWidth = data.imgRealSize.split('x')[0];
		data.originalHeight = data.imgRealSize.split('x')[1];
		
		if( !data.width ) data.width = 700;

		$(this).empty();
		$(this).css( 'overflow', 'hidden' );
		$(this).css( 'position', 'relative' );

		var PM_Container = document.createElement( 'div' );
		$(PM_Container).addClass( 'PM_container' );
		$(PM_Container).css( 'position', 'absolute' );
		$(PM_Container).css( 'left', '0px' );
		$(PM_Container).css( 'top', '0px' );
		
		var PM_Mapa = document.createElement( 'div' );
		$(PM_Mapa).addClass( 'PM_mapa' );
		$(PM_Mapa).css( 'position', 'absolute' );
		$(PM_Mapa).css( 'left', '0px' );
		$(PM_Mapa).css( 'top', '0px' );

		var PM_IMG_Mapa = new Image;
		$(PM_IMG_Mapa).attr( 'src', data.img );
		$(PM_IMG_Mapa).width( data.width );
		$(PM_IMG_Mapa).height( parseInt( data.width / data.originalWidth * data.originalHeight ) );
		$(PM_IMG_Mapa).attr( 'border', '0' );
		$(PM_IMG_Mapa).addClass( 'PM_imgmapa' );

		$(PM_Mapa).append( PM_IMG_Mapa );
		$(PM_Container).append( PM_Mapa );
		$(this).append( PM_Container );

		$(this).width( $(PM_IMG_Mapa).width() + 'px' );
		$(this).height( $(PM_IMG_Mapa).height() + 'px' );

		$(PM_Container).width( $(PM_IMG_Mapa).width() + 'px' );
		$(PM_Container).height( $(PM_IMG_Mapa).height() + 'px' );

		jQuery.data( this.get(0), "data", data );
		PM_Situa_POIS( this, data );
		
		$(PM_Mapa).draggable( { containment: '.PM_container' });
		
		if( data.poiClick ) {
			$(".PM_imgpoi").live("click", function() {
				data.poiClick( $(this).parent().children('.PM_imgpoi').indexOf( this ) );
			} );
		}
	};

	$.fn.POI_Zoom = function( factor ) {
		var mx, my;
		var data = jQuery.data( this.get(0), 'data' );

		if( !data ) {
			alert( 'Objeto no inicializado' );
			return;
		}

		var PM_container = $(this).children( '.PM_container' );
		var divMapa = $(PM_container).children( '.PM_mapa' );
		var PM_imgmapa = $(divMapa).children( '.PM_imgmapa' );

		if( ( $(PM_imgmapa).width() >= data.originalWidth ) && ( factor > 1 ) )
			return;

		px_actual = ( parseInt( $(divMapa).css( 'left' ) ) + parseInt( $(divMapa).width() / 2 ) ) / $(PM_container).width();
		py_actual = ( parseInt( $(divMapa).css( 'top' ) ) + parseInt( $(divMapa).height() / 2 ) ) / $(PM_container).height();

		cx = parseInt( ( $(PM_container).width() / 2 - parseInt( $(divMapa).css( 'left' ) ) ) * factor );
		cy = parseInt( ( $(PM_container).height() / 2 - parseInt( $(divMapa).css( 'top' ) ) ) * factor );

		if( parseInt( $(PM_imgmapa).width() * factor ) < $(this).width() ) {
			$(PM_imgmapa).width( $(this).width() );
			$(PM_imgmapa).height( $(this).height() );
			$(PM_imgmapa).css( 'left', '0px' );
			$(PM_imgmapa).css( 'top', '0px' );

			$(PM_container).width( $(this).width() );
			$(PM_container).height( $(this).height() );
			$(PM_container).css( 'margin-left', '0px' );
			$(PM_container).css( 'margin-top', '0px' );

			$(divMapa).css( 'left', '0px' );
			$(divMapa).css( 'top', '0px' );

			PM_Situa_POIS( this, data );
			return;
		}
		
		// Reducimos la imagen en la proporcion indicada
		$(PM_imgmapa).width( parseInt( $(PM_imgmapa).width() * factor ) );
		$(PM_imgmapa).height( parseInt( $(PM_imgmapa).height() * factor ) );

		// Reducimos el contenedor de la imagen en la proporcion indicada
		$(divMapa).width( $(PM_imgmapa).width() );
		$(divMapa).height( $(PM_imgmapa).height() );

		// Reducimos el contenedor, que ha de ser igual al doble de la imagen menos la zona visible
		$(PM_container).width( $(PM_imgmapa).width() * 2 - $(this).width() );
		$(PM_container).height( $(PM_imgmapa).height() * 2 - $(this).height() );
		
		// Posicionamos el container. El centro del objeto (this) es el centro del container
		$(PM_container).css( 'margin-left', parseInt( ( ( $(PM_container).width() ) - $(this).width() ) / -2 ) + 'px' );
		$(PM_container).css( 'margin-top', parseInt( ( ( $(PM_container).height() ) - $(this).height() ) / -2 ) + 'px' );
		
		nx = parseInt( $(PM_container).width() / 2 ) - cx;
		ny = parseInt( $(PM_container).height() / 2 ) - cy;

		$(divMapa).css( 'left', nx + 'px' );
		$(divMapa).css( 'top', ny + 'px' );
		
		PM_Situa_POIS( this, data );
	};
	
	function PM_Situa_POIS( obj, data ) {
		var PM_imgmapa = $(obj).children( '.PM_container' ).children( '.PM_mapa' ).children( '.PM_imgmapa' );
		var divMapa = $(obj).children( '.PM_container' ).children( '.PM_mapa' );

		var imgs = $( obj ).children( '.PM_container' ).children( '.PM_mapa' ).children( '.PM_imgpoi' );
		$( imgs ).remove();
		
		var proporcion = $(PM_imgmapa).width() / data.originalWidth;

		for( i=0; i<data.pois.length; i++ ) {
			im = new Image;
			$(im).addClass( 'PM_imgpoi' );
			$(im).attr( 'alt', data.pois[i].nombre );
			$(im).attr( 'title', data.pois[i].nombre );
			if( data.pois[i].icon )
				$(im).attr( 'src', data.pois[i].icon );
			else
				$(im).attr( 'src', data.defaultIcon );
			if( data.pois[i].zindex )
				$(im).css( 'z-index', data.pois[i].zindex );
			$(im).css( 'cursor', 'pointer' );
			$(im).css( 'position', 'absolute' );
			
			$(divMapa).append( im );
			$(im).css( 'left', parseInt( data.pois[i].x * proporcion ) - parseInt( $(im).width() / 2 ) + 'px' );
			$(im).css( 'top', parseInt( data.pois[i].y * proporcion ) - parseInt( $(im).height() / 2 ) + 'px' );
		}
	}
	
	jQuery.fn.indexOf = function(e){
		for( var i=0; i<this.length; i++ ){
			if( this[i] == e ) return i;
		}
		return -1;
	};
} ) (jQuery);

