// ================================================================================
// JavaScript library for ClimbAlone
// IMPORTANT NOTICE: define variable "Root" in your HTML code if the HTML file
// is located in a directory other than root
// ================================================================================

// --------------------------------------------------------------------------------
// Configuration
// --------------------------------------------------------------------------------

// Last update
var LastUpdate = "2011/12/30";

// Number of climbs
var NumBasse = 18;
var NumSecondo = 7;
var NumTerzo = 6;
var NumQuarto = 5;
var NumFerrate = 3;
var NumSfondi = 134;

// Number of thumbs per row in album
var ThumbsPerRow = 4;

// Number of side pictures available
var NumSidePictures = 20;

// --------------------------------------------------------------------------------
// Variables
// --------------------------------------------------------------------------------

// Root dir (default is ".")
if (typeof(Root) == "undefined")
	Root = ".";

// Random pictures showed so far
var SidePictures = new Array;

// Menu items
var MenuItems = new Array;

// Climbs
var Climbs = new Array;

// Links
var Links = new Array;

// Pictures
var Pictures = new Array;

// Wallpapers
var Wallpapers = new Array;

// Year, as per search string
var Year = getSearchStringParam(window.location.href, "year");

// --------------------------------------------------------------------------------
// Functions
// --------------------------------------------------------------------------------

// Show heading (logo + title)
function showHeading(title)
{
	document.write('<span style="font-family: helvetica,arial,sans-serif;">');
	document.write('<div style="text-align: center;">');
	document.write('<a href="' + Root + '/index.html">');
	document.write('<img alt="ClimbAlone" title="ClimbAlone" src="' + Root + '/pictures/climb_alone.jpg" style="width: 414px; height: 60px; border: 0px">');
	document.write('</a>');
	document.write('<br>');
	document.write('<big>');
	document.write('<big style="font-weight: bold;">');
	document.write(title);
	document.write('</big>');
	document.write('<br>');
	document.write('</big>');
	document.write('</div>');
	document.write('</span>');
	document.write('<hr style="width: 100%; height: 2px;">');
}

// Add menu item
function addMenuItem(item_caption, item_url)
{
	// Add item to menu items
	var i = MenuItems.length;
	MenuItems[i] = new Array;
	MenuItems[i].caption = item_caption;
	MenuItems[i].url = item_url;
}

// Show Menu
function showMenu()
{
	// Show menu title
	document.write('<big>');
	document.write('<span style="font-family: helvetica,arial,sans-serif; font-weight: bold;">');
	document.write("Indice");
	document.write('</span>');
	document.write('<br>');
	document.write('</big>');
	document.write('<br>');

	// Show menu items
	document.write('<span style="font-weight: bold;">');
	for (i = 0; i < MenuItems.length; i++)
	{
		document.write('<a href="' + Root + '/' + MenuItems[i].url + '">' + MenuItems[i].caption + '</a><br>');
	}
	document.write('</span>');
}

// Show info
function showInfo()
{
	document.write("Ultimo aggiornamento");
	document.write('<br>');
	document.write(LastUpdate);
	document.write('<br>');
	document.write('<br>');
	document.write("Ottimizzato per risoluzione");
	document.write('<br>');
	document.write("1280 x 800");
	document.write('<br>');
}

// Show side pictures
function showSidePictures(n)
{
	for (i = 0; i < n; i++)
	{
		// Show side pictures
		document.write('<br>');
		j = uniqueRandomNumber(SidePictures, NumSidePictures);
		jjj = String("000" + j).slice(-3);
		document.write('<img alt="Foto" title="Foto" src="' + Root + '/side_pictures/picture_' + jjj + '.jpg" style="width: 192px; height: 320px;">');
		document.write('<br>');
	}
}

// Show footer
function showFooter()
{
	document.write('<div style="text-align: center;">');
	document.write('<span style="font-family: helvetica,arial,sans-serif;">');
	document.write('<span style="font-weight: bold;">');
	document.write("Nota importante");
	document.write('</span>');
	document.write(": l'autore del sito, pur cercando con il massimo impegno di riportare informazioni corrette e complete, offre tali informazioni cos&igrave; come sono, senza specifiche garanzie. Inoltre, nel raccomandare di utilizzare le suddette informazioni con prudenza e buon senso, declina ogni responsabilit&agrave; in quanto a infortuni, danni, disagi o inconvenienti subiti da chi le legge e utilizza.");
	document.write('</span>');
	document.write('<br>');
	document.write('</div>');
}

// Add climb
function addClimb(zone, mount, climb, difficulty, report_dir)
{
	// Add climb to climbs
	var i = Climbs.length;
	Climbs[i] = new Array;
	Climbs[i].zone = zone;
	Climbs[i].mount = mount;
	Climbs[i].climb = climb;
	Climbs[i].difficulty = difficulty;
	Climbs[i].report_dir = report_dir;
}

// Show climbs
function showClimbs()
{
	// Begin table
	document.write('<table style="width: 100%; text-align: left;" border="1" cellpadding="2" cellspacing="2">');
	document.write('<tbody style="font-weight: bold;">');
	
	// Heading
	document.write('<tr bgcolor="#ffffc0">');
	document.write('<td style="vertical-align: middle;">N<br></td>');
	document.write('<td style="vertical-align: middle;">Gruppo/Zona<br></td>');
	document.write('<td style="vertical-align: middle;">Monte/Parete/Luogo<br></td>');
	document.write('<td style="vertical-align: middle;">Via<br></td>');
	document.write('<td style="vertical-align: middle;">Grado<br></td>');
	document.write('</tr>');
	
	// Climbs
	for (i = 0; i < Climbs.length; i++)
	{
		document.write('<tr>');
		iii = String("000" + (i + 1)).slice(-3);
		document.write('<td style="vertical-align: middle;">' + iii + '<br></td>');
		document.write('<td style="vertical-align: middle;">' + Climbs[i].zone + '<br></td>');
		document.write('<td style="vertical-align: middle;">' + Climbs[i].mount + '<br></td>');
		document.write('<td style="vertical-align: middle;"><a href="' + Climbs[i].report_dir + '/relazione.html' + '">' + Climbs[i].climb + '</a><br></td>');
		document.write('<td style="vertical-align: middle;">' + Climbs[i].difficulty + '<br></td>');
		document.write('</tr>');
	}
	
	// End table
	document.write('</tbody>');
	document.write('</table>');
}

// Add link
function addLink(link_caption, link_picture, picture_width, picture_height, link_url, link_description)
{
	// Add link to links
	var i = Links.length;
	Links[i] = new Array;
	Links[i].caption = link_caption;
	Links[i].picture = link_picture;
	Links[i].width = picture_width;
	Links[i].height = picture_height;
	Links[i].url = link_url;
	Links[i].description = link_description;
}

// Show links
function showLinks()
{
	// Begin table
	document.write('<table style="width: 100%; text-align: left;" border="0" cellpadding="2" cellspacing="10">');
	document.write('<tbody>');
	
	// Show links
	for (i = 0; i < Links.length; i++)
	{
		// Begin row
		document.write('<tr>');
		
		// Picture cell
		document.write('<td style="text-align: right; vertical-align: middle;">');
		document.write('<a href="' + Links[i].url + '">');
		document.write('<img alt="' + Links[i].caption +
				'" src="' + Root + '/link_pictures/' + Links[i].picture +
				'" style="border: 0px solid ; width: ' + Links[i].width + 'px; height: ' + Links[i].height + 'px;">');
		document.write('</a>');
		document.write('<br>');
		document.write('</td>');
		
		// Description cell
		document.write('<td style="text-align: left; vertical-align: middle; font-weight: bold;">');
		document.write(Links[i].description);
		document.write('<br>');
		document.write('</td>');
		
		// End row
		document.write('</tr>');
	}
	
	// End table
	document.write('</tbody>');
	document.write('</table>');
}

// Add a series of pictures; variable arguments are picture file names / captions
function addPictures(dir, title)
{
	// Add
	var i = Pictures.length;
	Pictures[i] = new Array;
	Pictures[i].dir = dir;
	Pictures[i].title = title;
	Pictures[i].pictures = new Array;
	num_pictures = (addPictures.arguments.length - 2) / 2;
	for (j = 0; j < num_pictures; j++)
	{
		Pictures[i].pictures[j] = new Array;
		Pictures[i].pictures[j].file_name = addPictures.arguments[2 + 2 * j];
		Pictures[i].pictures[j].caption = addPictures.arguments[2 + 2 * j + 1];
	}
}

// Show album index
// Search string: ?year=<yyyy>
function showAlbumIndex()
{
	document.write('<span style="font-family: helvetica,arial,sans-serif; font-weight: bold;">');
	document.write('<div style="text-align: center; font-weight: bold;">');

	// Open table
	document.write('<table style="margin-left: auto; margin-right: auto; text-align: center;" border="0" cellpadding="2" cellspacing="2">');
	document.write('<tbody>');
	
	// Determine number of rows
	var n = Pictures.length;
	rows = Math.floor((n + ThumbsPerRow - 1) / ThumbsPerRow);

	// Loop on titles
	var k = 0;
	for (row = 0; row < rows && k < n; row++)
	{
		// Open row
		document.write('<tr>');
		
		for (col = 0; col < ThumbsPerRow && k < n; col++)
		{
			// Show picture and caption
			var dir = Pictures[k].dir;
			var title = Pictures[k].title;
			document.write('<td style="width: 160px; text-align: center; vertical-align: middle;">');
			document.write('<a href="thumbs.html?year=' + Year + '&section=' + (k + 1) + '">');
			document.write('<img alt="' + title + '" title="' + title + '" src="album/' + Year + '/thumbs/' + dir + '.jpg" style="border: 0px solid ;">');
			document.write('<br>');
			document.write(title);
			document.write('</a>');
			document.write('<br>');
        	document.write('</td>');
			
			// Increment
			k++;
		}
		
		// Close row
		document.write('</tr>');
	}
	
	// Close table
	document.write('</tbody>');
	document.write('</table>');
	document.write('<br>');

	document.write('</div>');
	document.write('</span>');
}

// Show album thumbs
// Search string: ?section=<i>
function showAlbumThumbs(search_string)
{
	var section = getSearchStringParam(search_string, "section");
	var i = parseInt(section) - 1;
	
	document.write('<span style="font-family: helvetica,arial,sans-serif; font-weight: bold;">');
	document.write('<div style="text-align: center;">');

	document.write('<table style="margin-left: auto; margin-right: auto; text-align: center;" border="0" cellpadding="2" cellspacing="0">');
	document.write('<tbody>');
	document.write('<tr>');

	document.write('<td style="width: 100px; text-align: left; vertical-align: middle;">');
	document.write('<a href="album.html?year=' + Year + '">');
	document.write('<big>Album</big>');
	document.write('</a>');
	document.write('</td>');

	document.write('<td style="width: 100px; text-align: left; vertical-align: middle;">');
	if (i > 0)
	{
		document.write('<a href="thumbs.html?year=' + Year + '&section=' + i + '">');
		document.write('<big>Precedente</big>');
		document.write('</a>');
	}
	document.write('</td>');

	document.write('<td style="width: 420px; text-align: center; vertical-align: middle;" bgcolor="#E0E0E0">');
	document.write('<big>');
	document.write(Pictures[i].title);
	document.write('</big>');
	document.write('</td>');

	document.write('<td style="width: 100px; text-align: right; vertical-align: middle;">');
	if (i < Pictures.length - 1)
	{
		document.write('<a href="thumbs.html?year=' + Year + '&section=' + (i + 2) + '">');
		document.write('<big>Successivo</big>');
		document.write('</a>');
	}
	document.write('</td>');

	document.write('<td style="width: 100px; text-align: right; vertical-align: middle;">');
	document.write('</td>');

	document.write('</tr>');
	document.write('</tbody>');
	document.write('</table>');

	// Determine number of rows
	var num_pictures = Pictures[i].pictures.length;
	rows = Math.floor((num_pictures + ThumbsPerRow - 1) / ThumbsPerRow);
	
	// Open table
	document.write('<table style="margin-left: auto; margin-right: auto; text-align: center;" border="0" cellpadding="2" cellspacing="2">');
	document.write('<tbody>');
	
	// Loop on pictures
	var k = 0;
	for (row = 0; row < rows && k < num_pictures; row++)
	{
		// Open row
		document.write('<tr>');
		
		for (col = 0; col < ThumbsPerRow && k < num_pictures; col++)
		{
			// Show picture and caption
			var dir = Pictures[i].dir;
			var file_name = Pictures[i].pictures[k].file_name;
			var caption = Pictures[i].pictures[k].caption;
			document.write('<td style="width: 160px; text-align: center; vertical-align: middle;">');
			document.write('<a href="picture.html?year=' + Year + '&section=' + (i + 1) + '&picture=' + (k + 1) + '">');
			document.write('<img alt="' + caption + '" title="' + caption + '" src="album/' + Year + '/' + dir + '/thumbs/' + file_name + '" style="border: 0px solid ;">');
			document.write('<br>');
			document.write(caption);
			document.write('</a>');
			document.write('<br>');
        	document.write('</td>');
			
			// Increment
			k++;
		}
		
		// Close row
		document.write('</tr>');
	}
	
	// Close table
	document.write('</tbody>');
	document.write('</table>');
	document.write('<br>');

	document.write('</div>');
	document.write('</span>');
}

// Show album picture
// Search string: ?section=<i>&picture=<k>
function showPicture(search_string)
{
	var section = getSearchStringParam(search_string, "section");
	var i = parseInt(section) - 1;
	var picture = getSearchStringParam(search_string, "picture");
	var k = parseInt(picture) - 1;

	// Retrieve picture attributes	
	var num_pictures = Pictures[i].pictures.length;
	var dir = Pictures[i].dir;
	var file_name = Pictures[i].pictures[k].file_name;
	var caption = Pictures[i].pictures[k].caption;

	// Show
	document.write('<span style="font-family: helvetica,arial,sans-serif; font-weight: bold;">');
	document.write('<div style="text-align: center;">');

	document.write('<table style="margin-left: auto; margin-right: auto; text-align: center;" border="0" cellpadding="2" cellspacing="0">');
	document.write('<tbody>');
	document.write('<tr>');

	document.write('<td style="width: 100px; text-align: left; vertical-align: middle;">');
	document.write('<a href="thumbs.html?year=' + Year + '&section=' + (i + 1) + '">');
	document.write('<big>Indice</big>');
	document.write('</a>');
	document.write('</td>');

	document.write('<td style="width: 100px; text-align: left; vertical-align: middle;">');
	if (k > 0)
	{
		document.write('<a href="picture.html?year=' + Year + '&section=' + (i + 1) + '&picture=' + k + '">');
		document.write('<big>Precedente</big>');
		document.write('</a>');
	}
	document.write('</td>');

	document.write('<td style="width: 420px; text-align: center; vertical-align: middle;" bgcolor="#E0E0E0">');
	document.write('<big>');
	document.write(caption);
	document.write('</big>');
	document.write('</td>');

	document.write('<td style="width: 100px; text-align: right; vertical-align: middle;">');
	if (k < num_pictures - 1)
	{
		document.write('<a href="picture.html?year=' + Year + '&section=' + (i + 1) + '&picture=' + (k + 2) + '">');
		document.write('<big>Successiva</big>');
		document.write('</a>');
	}
	document.write('</td>');

	document.write('<td style="width: 100px; text-align: right; vertical-align: middle;">');
	document.write('</td>');

	document.write('</tr>');
	document.write('</tbody>');
	document.write('</table>');

	document.write('<img alt="' + caption + '" title="' + caption + '" src="album/' + Year + '/' + dir + '/pictures/' + file_name + '">');

	document.write('</div>');
	document.write('</span>');
}

// Add wallpapers; variable arguments are picture file names / captions / resolutions
function addWallpapers()
{
	// Add
	num_pictures = (addWallpapers.arguments.length) / 3;
	for (i = 0; i < num_pictures; i++)
	{
		Wallpapers[i] = new Array;
		Wallpapers[i].file_name = addWallpapers.arguments[3 * i];
		Wallpapers[i].caption = addWallpapers.arguments[3 * i + 1];
		Wallpapers[i].resolutions = addWallpapers.arguments[3 * i + 2];
	}
}

// Show wallpaper thumbs
// Search string: ?resolution=<r>&first=<i>
function showWallpaperThumbs(search_string)
{
	// Check for arguments
	var resolution = "1280x800";
	var first = 0;
	if (search_string.length > 0 && search_string.charAt(0) == "?")
	{
		// Split into components
		search_components = search_string.slice(1).split("&");
		if (search_components.length != 2)
			return;
	
		// Split resolution into sub-components
		search_sub_components = search_components[0].split("=");
		if (search_sub_components.length != 2 || search_sub_components[0] != "resolution")
			return;
		resolution = search_sub_components[1];
		
		// Split first into sub-components
		search_sub_components = search_components[1].split("=");
		if (search_sub_components.length != 2 || search_sub_components[0] != "first")
			return;
		first = parseInt(search_sub_components[1]) - 1;
	}
	
	// Determine number of thumbs that can be shown	
	var num_thumbs = ThumbsPerRow * ThumbsPerColumn;
	if (first + ThumbsPerRow * ThumbsPerColumn > Wallpapers.length)
		num_thumbs -= first + ThumbsPerRow * ThumbsPerColumn - Wallpapers.length;

	document.write('<span style="font-family: helvetica,arial,sans-serif; font-weight: bold;">');
	document.write('<div style="text-align: center;">');

	document.write('<table style="margin-left: auto; margin-right: auto; text-align: center;" border="0" cellpadding="2" cellspacing="0">');
	document.write('<tbody>');
	document.write('<tr>');

	document.write('<td style="width: 100px; text-align: left; vertical-align: middle;">');
	document.write('</td>');

	document.write('<td style="width: 100px; text-align: left; vertical-align: middle;">');
	if (first > 0)
	{
		document.write('<a href="wallpapers.html?resolution=' + resolution + '&first=' + (first - ThumbsPerRow * ThumbsPerColumn + 1) + '">');
		document.write('<big>Precedenti</big>');
		document.write('</a>');
	}
	document.write('</td>');

	document.write('<td style="width: 420px; text-align: center; vertical-align: middle;" bgcolor="#E0E0E0">');
	document.write('<big>');
	document.write('Sfondi ' + (first + 1) + ' - ' + (first + num_thumbs));
	document.write('</big>');
	document.write('</td>');
	
	document.write('<td style="width: 100px; text-align: right; vertical-align: middle;">');
	if (first + ThumbsPerRow * ThumbsPerColumn < Wallpapers.length)
	{
		document.write('<a href="wallpapers.html?resolution=' + resolution + '&first=' + (first + ThumbsPerRow * ThumbsPerColumn + 1) + '">');
		document.write('<big>Successivi</big>');
		document.write('</a>');
	}
	document.write('</td>');

	document.write('<td style="width: 100px; text-align: right; vertical-align: middle;">');
	document.write('</td>');

	document.write('</tr>');
	document.write('</tbody>');
	document.write('</table>');

	// Determine number of rows
	rows = Math.floor((num_thumbs + ThumbsPerRow - 1) / ThumbsPerRow);
	
	// Open table
	document.write('<table style="margin-left: auto; margin-right: auto; text-align: center;" border="0" cellpadding="2" cellspacing="2">');
	document.write('<tbody>');
	
	// Loop on pictures
	var k = 0;
	for (row = 0; row < rows && k < num_thumbs; row++)
	{
		// Open row
		document.write('<tr>');
		
		for (col = 0; col < ThumbsPerRow && k < num_thumbs; col++)
		{
			// Show picture and caption
			var file_name = Wallpapers[first + k].file_name;
			var caption = Wallpapers[first + k].caption;
			var resolutions = Wallpapers[first + k].resolutions;
			var is_available = isInList(resolution, resolutions);
			document.write('<td style="width: 160px; text-align: center; vertical-align: middle;">');
			if (is_available)
			{
				document.write('<a href="wallpapers/' + resolution + '/' + file_name + '">');
				document.write('<img alt="' + caption + '" title="' + caption + '" src="wallpapers/thumbs/' + file_name + '" style="border: 0px solid ;">');
				document.write('<br>');
				document.write(caption);
				document.write('</a>');
			}
			else
			{
				document.write('<img alt="Non disponibile a questa risoluzione" title="Non disponibile a questa risoluzione" src="wallpapers/thumbs/na.jpg" style="border: 0px solid ;">');
				document.write('<br>');
				document.write(caption);
			}
			document.write('<br>');
        	document.write('</td>');
			
			// Increment
			k++;
		}
		
		// Close row
		document.write('</tr>');
	}
	
	// Close table
	document.write('</tbody>');
	document.write('</table>');
	document.write('<br>');

	// Allow choosing wallpaper size
	if (resolution == "1280x800")
		document.write('&raquo; ');
	document.write('<a href="wallpapers.html?resolution=1280x800&first=' + (first + 1) + '">1280 x 800</a>');
	document.write('<br>');
	if (resolution == "1280x1024")
		document.write('&raquo; ');
	document.write('<a href="wallpapers.html?resolution=1280x1024&first=' + (first + 1) + '">1280 x 1024</a>');
	document.write('<br>');

	document.write('</div>');
	document.write('</span>');
}

// --------------------------------------------------------------------------------
// Helper functions
// --------------------------------------------------------------------------------

// Get parameter from search string or url
// Return "" if failed
function getSearchStringParam(search_string, param_name)
{
//	alert("Search string = '" + search_string + "'");

	// Split around "?" char, to extract search string value
	pathname_components = search_string.split("?");
//	alert("Number of pathname components = " + pathname_components.length);
	if (pathname_components.length < 2)
		return ("");
		
	// Split into components, around "&" char
	search_components = pathname_components[1].split("&");
//	alert("Number of search components = " + search_components.length);
	if (search_components.length < 1)
		return ("");

	// Parse components
	for (i = 0; i < search_components.length; i++)
	{
		search_sub_components = search_components[i].split("=");
		if (search_sub_components.length == 2 && search_sub_components[0] == param_name)
			return (search_sub_components[1]);
	}
	
	return ("");
}

// Generate unique random number
function uniqueRandomNumber(number_list, range)
{
	// Check if there are numbers
	if (number_list.length >= range)
	{
		alert("Can not generate unique random number!!!");
		return (0);
	}
	
	var j;
	while (1)
	{
		// Generate random number
		j = Math.floor(Math.random() * range);
		
		// Check if already generated
		var i;
		for (i = 0; i < number_list.length; i++)
		{
			if (number_list[i] == j)
				break;
		}
		if (i >= number_list.length)
		{
			// Not yet generated: add to list and return
			number_list[number_list.length] = j;
			return (j);
		}
	}
	
	// Dummy return
	return (0);
}

// Check if string is in a given comma-separated list of strings
function isInList(s, list)
{
	var ss = list.split(",");
	for (i = 0; i < ss.length; i++)
	{
		if (s == ss[i])
			return true;
	}
	return false;
}

