﻿
/**
 * NAMESPACE: Global app namespace
 */
Guise = {};


/**
 * NAMESPACE: Packaging
 */
Guise.Packaging = (function() {

	return {
		//-----
		// FUNCTION: Initialise
		//           
		Initialise: function() {

			var options = {
				url: "data/packagingSolutions.xml",
				dataType: "xml",
				type: "GET",
				success: $.proxy(this.OnDataLoaded, this),
				error: function() {
					console.log(arguments);	
				}
			};

			$.ajax(options);
		},

		Solutions: undefined,

		OnPackageClicked: function (event) {

			var anchor = $(event.currentTarget);
			var index = anchor.attr("rel");

			this.UpdateSelected(parseInt(index));

			return false;
		},

		//-----
		// METHOD: UpdateSelected
		//         Called to update the currently selected package to 
		//         a specified index.
		UpdateSelected: function(index) {
		
			// Get the package details
			var solution = this.Solutions[index];
			var image = $("image", solution).text();
			var filename = $("filename", solution).text();
			var description = $("description", solution).text();

			// Update the selected info elements
			$(".packages #pageContent #preview img").attr("src", image);
			$(".packages #pageContent #preview img").attr("alt", description);
			$(".packages #pageContent #quote").attr("href", filename);

			$(".packages #pageContent #list li").removeClass("selected");
			$(".packages #pageContent #list li:eq(" + index +")").addClass("selected");

			// Set the state of the next nav link
			var next = $(".packages #pageContent #next");

			if (index < this.Solutions.length - 1) {
				next.show();
				next.attr("rel", index + 1);
			}
			else {
				next.hide();
			}

			// Set the state of the previous nav link
			var previous = $(".packages #pageContent #prev");

			if (index > 0) {
				previous.show();
				previous.attr("rel", index - 1);
			}
			else {
				previous.hide();
			}		
			
			return false;	
		},

		//-----
		// EVENT:  OnDataLoaded
		//         Called when the XML data has been loaded from the server and parsed.
		//         Builds the list of packages and sets up event handlers for the browsing
		//         buttons.
		OnDataLoaded: function(data) {
	
			var solutions = $("solutions solution", data);
			var list = $(".packages #pageContent #list");

			this.Solutions = solutions;

			for (var i = 0; i < solutions.length; i++) {
						
				var solution = solutions[i];
				var description = $("description", solution).text();
				var filename = $("filename", solution).text();

				var item = list.append("<li><a href='#' rel='" + i + "'>" + description + "</a></li>");
				
				if (i === 0) {
					this.UpdateSelected(i);
				}
			}

			$(".packages #pageContent #controls a, .packages #pageContent #nav #list a").click($.proxy(this.OnPackageClicked, this));
		}
	};
})();




/**
 * NAMESPACE: Paper
 */
Guise.Paper = (function() {

	return {
		//-----
		// FUNCTION: Initialise
		//           
		Initialise: function() {

			var options = {
				url: "data/paperSolutions.xml",
				dataType: "xml",
				type: "GET",
				success: $.proxy(this.OnDataLoaded, this),
				error: function() {
					console.log(arguments);	
				}
			};

			$.ajax(options);
		},

		Solutions: undefined,

		OnPackageClicked: function (event) {

			var anchor = $(event.currentTarget);
			var index = anchor.attr("rel");

			this.UpdateSelected(parseInt(index));
			
			return false;
		},

		//-----
		// METHOD: UpdateSelected
		//         Called to update the currently selected package to 
		//         a specified index.
		UpdateSelected: function(index) {
		
			// Get the package details
			var solution = this.Solutions[index];
			var image = $("image", solution).text();
			var link = $("link", solution).text();
			var description = $("description", solution).text();

			// Update the selected info elements
			$(".paper #pageContent #preview img").attr("src", image);
			$(".paper #pageContent #preview img").attr("alt", description);
			$(".paper #pageContent #link").attr("href", link);
			$(".paper #pageContent #link").text(link);

			$(".paper #pageContent #list li").removeClass("selected");
			$(".paper #pageContent #list li:eq(" + index +")").addClass("selected");

			// Set the state of the next nav link
			var next = $(".paper #pageContent #next");

			if (index < this.Solutions.length - 1) {
				next.show();
				next.attr("rel", index + 1);
			}
			else {
				next.hide();
			}

			// Set the state of the previous nav link
			var previous = $(".paper #pageContent #prev");

			if (index > 0) {
				previous.show();
				previous.attr("rel", index - 1);
			}
			else {
				previous.hide();
			}	
			
			return false;		
		},

		//-----
		// EVENT:  OnDataLoaded
		//         Called when the XML data has been loaded from the server and parsed.
		//         Builds the list of packages and sets up event handlers for the browsing
		//         buttons.
		OnDataLoaded: function(data) {
	
			var solutions = $("solutions solution", data);
			var list = $(".paper #pageContent #list");

			this.Solutions = solutions;

			for (var i = 0; i < solutions.length; i++) {
						
				var solution = solutions[i];
				var description = $("description", solution).text();
				var filename = $("filename", solution).text();

				var item = list.append("<li><a href='#' rel='" + i + "'>" + description + "</a></li>");
				
				if (i === 0) {
					this.UpdateSelected(i);
				}
			}

			$(".paper #pageContent #nav a").click($.proxy(this.OnPackageClicked, this));
			$(".paper #pageContent #preview #controls a").click($.proxy(this.OnPackageClicked, this));
		}
	};
})();





/**
 * NAMESPACE: Boards
 */
Guise.Boards = (function() {

	return {
		//-----
		// FUNCTION: Initialise
		//           
		Initialise: function() {

			var options = {
				url: "data/boardRange.xml",
				dataType: "xml",
				type: "GET",
				success: $.proxy(this.OnDataLoaded, this)
			};

			$.ajax(options);
		},

		Boards: undefined,

		OnBoardClicked: function (event) {

			var anchor = $(event.currentTarget);
			var index = anchor.attr("rel");

			this.UpdateSelected(parseInt(index));

			return false;
		},

		//-----
		// METHOD: UpdateSelected
		//         Called to update the currently selected board to 
		//         a specified index.
		UpdateSelected: function(index) {
		
			// Get the package details
			var board = this.Boards[index];
			var title = $("title", board).text();
			var content = $("content", board).text();
			var image = $("image", board).text();

			// Update the selected info elements
			$(".board #pageContent #preview img").attr("src", image);
			$(".board #pageContent #preview img").attr("alt", title);
			$(".board #pageContent #content").html(content);

			$(".board #pageContent #list li").removeClass("selected");
			$(".board #pageContent #list li:eq(" + index + ")").addClass("selected");

			// Set the state of the next nav link
			var next = $(".board #pageContent #next");

			if (index < this.Boards.length - 1) {
				next.show();
				next.attr("rel", index + 1);
			}
			else {
				next.hide();
			}

			// Set the state of the previous nav link
			var previous = $(".board #pageContent #prev");

			if (index > 0) {
				previous.show();
				previous.attr("rel", index - 1);
			}
			else {
				previous.hide();
			}	

			return false;
		},

		//-----
		// EVENT:  OnDataLoaded
		//         Called when the XML data has been loaded from the server and parsed.
		//         Builds the list of boards and sets up event handlers for the browsing
		//         buttons.
		OnDataLoaded: function(data) {
	
			var boards = $("boards board", data);
			var list = $(".board #pageContent #list");

			this.Boards = boards;

			for (var i = 0; i < boards.length; i++) {
						
				var board = boards[i];
				var description = $("title", board).text();

				// Add an entry for the board to the list
				list.append("<li><a href='#' rel='" + i + "'>" + description + "</a></li>");
				
				if (i === 0) {
					this.UpdateSelected(i);
				}
			}

			$(".board #pageContent a").click($.proxy(this.OnBoardClicked, this));
		}
	};
})();


