﻿/// <reference path="framework.js" />
/// <reference path="Resume.js" />
/// <reference path="Portfolio.js" />
/// <reference path="Blogger.js" />
/*jslint browser: true */
/*global window, DonavonWest */

/* © 2009 Donavon West. All rights reserved. */
/* Donavon West - Resume and Portfolio Web Application */



DonavonWest.Application = function() {

	var createElement;
	var div = "div";
	var none = "none";
	var block = "block";

	var resume;
	var portfolio;
	var blogger;
	var overlay;

	var webAppEl;
	var resumeAreaEl;
	var overlayEl;
	var portfolioAreaEl;
	var bloggerAreaEl;
	
	var opacity;
	

	function dispose() {
		DonavonWest.Utils.detachEvent(window, "unload", dispose);
		if (resume) {
			resume.dispose();
			resume = null;
		}
		if (overlay) {
			overlay.dispose();
			overlay = null;
		}
		if (portfolio) {
			portfolio.dispose();
			portfolio = null;
		}
		if (blogger) {
			blogger.dispose();
			blogger = null;
		}
		DonavonWest.Application = webAppEl = overlayEl = resumeAreaEl = portfolioAreaEl = bloggerAreaEl = createElement = null;
		
	}

	function initialize() {
		var el;	
		var webAppEl;
		var iframe;

		//here after the preloaded images iframe loads
		function imagesLoadedHandler(p_source) {
			DonavonWest.Utils.detachEvent(p_source, "load", imagesLoadedHandler);
			resume.imagesLoaded(); //tell the resume object to display the icons
		}
		
		//here when the user clicks on the Resume's portfolio icon
		function onPortfolioHandler() {
			overlay.show(function() {
				//here after the screen does dark
				portfolioAreaEl.style.display = block; //show the portfolio area
				portfolio = DonavonWest.Utils.bind(portfolioAreaEl, DonavonWest.Portfolio);
				portfolio.onClose = function() {
					//here when the user closes the portfolio
					portfolioAreaEl.style.display = none; //hide the portfolio area
					portfolio.dispose(); //kill the Portfolio object
					portfolio = null;
					overlay.hide(); //bring the screen brightness back up
				};
			});
		}

		//here when the user clicks on the Resume's "about" icon
		function onBloggerHandler() {
			overlay.show(function() {
				//here after the screen does dark
				bloggerAreaEl.style.display = block; //show the blogger area
				blogger = DonavonWest.Utils.bind(bloggerAreaEl, DonavonWest.Blogger);
				blogger.onClose = function() {
					//here when the user closes the blog post
					bloggerAreaEl.style.display = none; //hide the blogger area
					blogger.dispose(); //kill the Blogger object
					blogger = null;
					overlay.hide(); //bring the screen brightness back up
				};
			});
		}

		//shortcut		
		createElement = DonavonWest.Utils.createElement;

		//create our main application element (everything will be created inside of this element)
		//webAppEl = createElement("div", "DonavonWest_WebApp");
		//document.body.appendChild(webAppEl);
		webAppEl = document.getElementById("DonavonWest_WebApp");
		webAppEl.className = "DonavonWest_WebApp";
		
		//make sure dispose isFinite called when the page unloads
		DonavonWest.Utils.detachEvent(window, "load", initialize);
		DonavonWest.Utils.attachEvent(window, "unload", dispose);

		//create the Resume object (will display loading until Resume.imagesLoaded is called)
		el = createElement(div, "page_center");
			resumeAreaEl = createElement(div, "resume_area");
			el.appendChild(resumeAreaEl); //create resume area
			resume = DonavonWest.Utils.bind(resumeAreaEl, DonavonWest.Resume); //and the actual resume object
			resume.onPortfolioClick = onPortfolioHandler;
			resume.onAboutClick = onBloggerHandler;
		webAppEl.appendChild(el);

		//create the overlay		
		overlay = DonavonWest.Utils.bind(webAppEl, DonavonWest.UI.ScreenOverlay, {className: "black"});

		//create the are where we will create the Portfolio (only create when
		el = createElement(div, "page_center");
			portfolioAreaEl = createElement(div, "portfolio_area");
			el.appendChild(portfolioAreaEl); //create portfolio area. a new instance of Portfolio is create each time the icon is clicked (Resume.onPortfolioClick)
		webAppEl.appendChild(el);

		//create the are where we will create the Portfolio (only create when
		el = createElement(div, "page_center");
			bloggerAreaEl = createElement(div, "blogger_area");
			el.appendChild(bloggerAreaEl); //create blogger area. a new instance of Blogger is create each time the icon is clicked (Resume.onAboutClick)
		webAppEl.appendChild(el);

		//cache the images in a hidden (offscreen) iframe
		iframe = createElement("iframe", "iframeHidden");
		DonavonWest.Utils.attachEvent(iframe, "load", function() {imagesLoadedHandler(iframe);}); //when this fires, the whole thing lights up!
		webAppEl.appendChild(iframe);
		iframe.src = "default.images.htm"; //fire!
		
		//google analytics hidden iframe
		iframe = createElement("iframe", "iframeHidden");
		webAppEl.appendChild(iframe);
		iframe.src = "default.analytics.htm";

	}

	//constructor
	DonavonWest.Utils.attachEvent(window, "load", initialize); 
	
}();
