private string getAnimalName(ePuzzleAnimal animal){
		switch (animal) {
		case ePuzzleAnimal.Boa: 	return "Boa";
		case ePuzzleAnimal.Caiman: 	return "Caiman";
		case ePuzzleAnimal.Jaguar: 	return "Jaguar";
		case ePuzzleAnimal.Oso: 	return "Oso";
		case ePuzzleAnimal.Rana: 	return "Rana";
		case ePuzzleAnimal.Zorro: 	return "Zorro";
		default: 					return "";
		}
	}
	private Sprite getTileImage(ePuzzleAnimal animal, eTileType tileType){
		
		// Calculamos la ruta de la imagen
		string tileTypeURL = "";

		switch (tileType) {

		case eTileType.LineHorizontal: 	tileTypeURL = "Tiles/TilesLines/Horizontal/Line"; break;
		case eTileType.LineVertical: 	tileTypeURL = "Tiles/TilesLines/Vertical/Line"; break;
			
		// Cuadrante 1
		case eTileType.TurnRightToUp: 	tileTypeURL = "Tiles/TilesTurns/CornerBottomRight/Turn"; break;
		case eTileType.TurnUpToRight: 	tileTypeURL = "Tiles/TilesTurns/CornerTopLeft/Turn"; break;

		// Cuadrante 2
		case eTileType.TurnUpToLeft: 	tileTypeURL = "Tiles/TilesTurns/CornerTopRight/Turn"; break;
		case eTileType.TurnLeftToUp: 	tileTypeURL = "Tiles/TilesTurns/CornerBottomLeft/Turn"; break;

		// Cuadrante 3
		case eTileType.TurnLeftToDown: 	tileTypeURL = "Tiles/TilesTurns/CornerTopLeft/Turn"; break;
		case eTileType.TurnDownToLeft: 	tileTypeURL = "Tiles/TilesTurns/CornerBottomRight/Turn"; break;

		// Cuadrante 4
		case eTileType.TurnDownToRight: tileTypeURL = "Tiles/TilesTurns/CornerBottomLeft/Turn"; break;
		case eTileType.TurnRightToDown: tileTypeURL = "Tiles/TilesTurns/CornerTopRight/Turn"; break;

		default:
			break;
		}

		// Calculamos el nombre del animal
		string animalName = getAnimalName(animal);

		// Cargamos la imagen
		Texture2D texture2d = (Texture2D) Resources.Load ("Image/Screen2PuzzleMolas/" + tileTypeURL + animalName);
		Sprite imageTile = Sprite.Create (texture2d, new Rect(0, 0, texture2d.width, texture2d.height), Vector2.zero);

		// La retornamos
		return imageTile;
	}
	public void startDrag(){

		// Obtenemos la posicion actual del touch
		Vector3 currentDragPosition = cameraHUD.ScreenToViewportPoint (Input.mousePosition);

		// Determinamos el tile seleccionado
		Vector2 currentSelectedPosition = getSelectedTilePosition (currentDragPosition);

		// SI el drag esta siendo realizado dentro del tablero
		if (currentSelectedPosition.x != -1) {

			// Buscamos en la matriz de inicios si algun animal esta presente
			if (startsInfoMatrix [(int)currentSelectedPosition.x, (int)currentSelectedPosition.y] != ePuzzleAnimal.NO_ANIMAL) {

				// Guardamos el animal seleccionado
				currentSelectedAnimal = startsInfoMatrix [(int)currentSelectedPosition.x, (int)currentSelectedPosition.y];

				// Eliminamos todos los tiles previos de este animal
				for (int indexCol = 0; indexCol < 5; indexCol++) {
					for (int indexRow = 0; indexRow < 5; indexRow++) {

						// Si la posicion actual tiene un tile que corresponde al animal actual
						if (tilesInfoMatrix[indexCol, indexRow] == currentSelectedAnimal) {
							
							// Eliminamos la imagen del tile
							tilesInfoMatrix	[indexCol, indexRow] = ePuzzleAnimal.NO_ANIMAL;
							tilesImgsMatrix	[indexCol, indexRow].sprite = null;
							tilesImgsMatrix	[indexCol, indexRow].color  = imageHidden;
						}

						// Tambien eliminamos cualquier animal movido de su proxima posicion actual
						if (animalsInfoMatrix[indexCol, indexRow] == currentSelectedAnimal) {

							// Eliminamos la imagen del tile
							animalsInfoMatrix [indexCol, indexRow] = ePuzzleAnimal.NO_ANIMAL;
							animalsImgsMatrix [indexCol, indexRow].sprite = null;
							animalsImgsMatrix [indexCol, indexRow].color = imageHidden;	
						}
					}
				}

				// Volvemos a colocar el animal en la posicion inicial (que es la actual)
				animalsInfoMatrix [(int)currentSelectedPosition.x, (int)currentSelectedPosition.y] = currentSelectedAnimal;
				animalsImgsMatrix [(int)currentSelectedPosition.x, (int)currentSelectedPosition.y].sprite = getAnimalImage(currentSelectedAnimal);
				animalsImgsMatrix [(int)currentSelectedPosition.x, (int)currentSelectedPosition.y].color = imageActive;

				// Determinamos la direccion del tile
				eTileType last2TileDir = calculate2TileDirection(secondSelectedPosition, currentSelectedPosition, eTileType.LineHorizontal);

				// Colocamos la imagen del tile de inicio
				tilesInfoMatrix	[(int)currentSelectedPosition.x, (int)currentSelectedPosition.y] = currentSelectedAnimal;
				tilesImgsMatrix	[(int)currentSelectedPosition.x, (int)currentSelectedPosition.y].sprite = getTileImage (currentSelectedAnimal, last2TileDir);
				tilesImgsMatrix	[(int)currentSelectedPosition.x, (int)currentSelectedPosition.y].color  = imageActive;

				Debug.Log ("Start Tile: " + currentSelectedAnimal);

				// Actualizamos las posiciones previas
				thirdSelectedPosition = new Vector2 ((int)currentSelectedPosition.x, (int)currentSelectedPosition.y);
				secondSelectedPosition  = new Vector2 ((int)currentSelectedPosition.x, (int)currentSelectedPosition.y);
				
			} else {

				// No fue seleccionado ningun animal de inicio
				currentSelectedAnimal = ePuzzleAnimal.NO_ANIMAL;
			}
		} else {
			
			// Se ha iniciado el drag desde afuera del tablero
			currentSelectedAnimal = ePuzzleAnimal.NO_ANIMAL;
		}
	}
	private Sprite getAnimalImage(ePuzzleAnimal animal){

		// Calculamos el nombre del animal
		string animalName = getAnimalName(animal);

		// Cargamos la imagen
		Texture2D texture2d = (Texture2D) Resources.Load ("Image/Screen2PuzzleMolas/Animals/Animal" + animalName);
		Sprite imageAnimal = Sprite.Create (texture2d, new Rect(0, 0, texture2d.width, texture2d.height), Vector2.zero);

		// La retornamos
		return imageAnimal;
	}
	private void loadAnimalTargets(ePuzzleAnimal animal, Vector2 start, Vector2 end){
		
		// Start
		startsInfoMatrix  [(int)start.x, (int)start.y] 		  = animal;
		targetsImgsMatrix [(int)start.x, (int)start.y].sprite = getTargetImage(animal);
		targetsImgsMatrix [(int)start.x, (int)start.y].color  = imageActive;

		// End
		endsInfoMatrix 	  [(int)end.x, (int)end.y] 		  = animal;
		targetsImgsMatrix [(int)end.x, (int)end.y].sprite = getTargetImage(animal);
		targetsImgsMatrix [(int)end.x, (int)end.y].color  = imageActive;

		// Cargamos el animal de inicio
		animalsInfoMatrix [(int)start.x, (int)start.y] 		  = animal;
		animalsImgsMatrix [(int)start.x, (int)start.y].sprite = getAnimalImage(animal);
		animalsImgsMatrix [(int)start.x, (int)start.y].color  = imageActive;
	}