﻿/// <reference path="framework.js" />
/*jslint browser: true */
/*global DonavonWest */





/* © 2009 Donavon West. All rights reserved. */
DonavonWest.Blogger = function(p_el) {
	// -------------------
	//define all "local" variables (i.e. those not visible, and safe from read/write, outside of our Blogger object)
	
	var that = this; //creates smaller obfuscated code (and needed for callbacks)
	var element; //our main DIV elment
	
	var createBaseButton; //shortcuts
	var createElement;
	var div = "div";
	var none = "none";
	var block = "block";

	var closeButton; //out button objects
	var reloadButton;
	
	var req; //xmlhttprequest object for the JSON request
	
	var welcomeEl;
	var textAreaEl;
	var instructionsEl;
	
	var CLIENT_AREA_WIDTH = 530;
	var CLIENT_AREA_HEIGHT = 380;
	
	var bloggerEntry; //JSON object loaded here
	
	//var postUrl = "http://blog.donavon.com/feeds/posts/default/1484428372750514936?alt=json";
	var postUrl = "blog.rpx"; //until I can get that proxy written :)
	
	
	//displays the blog entry
	function displayItem() {
		welcomeEl.style.display = block;
		textAreaEl.innerHTML = '<div class="mainTitle">'+bloggerEntry.title.$t + "</div>" + bloggerEntry.content.$t;
	}
	
	//here when the user clicks the "close" button
	function closeButtonHandler() {
		if (that.onClose) {
			that.onClose(that); //call the handler
		}
	}

	//here when the user clicks the "reload" button
	function reloadButtonHandler() {
		reloadButton.hide();
		loadBlogger();
	}

	//sets the text of the lower area on the "welcome" page
	function setInstructions(p_text) {
		instructionsEl.innerHTML = p_text;
	}
	
	//here when the JSON object loads (or on an error/timeout, in which case p_json is null)
	function onJsonLoadHandler(p_json) {
	
		req = null; //kill the request object

		//p_json.entry.content.$t
		
		if (p_json && p_json.entry) { //do we have a valid JSON object?
			bloggerEntry = p_json.entry; //populate our object
			setInstructions('');
			displayItem();
			
		} else { //nope, error and try again later (TODO: add a timer to auto re-try???)
			setInstructions('Error reading article data');
			reloadButton.show();
		}
	}
	
	function loadBlogger() {
	
		setInstructions('<img src="images/vista-searching-ffffff.gif"/> Loading article, please wait'); //TODO: get rid of the IMG tag in the JS (yuck!)
		
		//req = DonavonWest.Network.createJsonRequest("portfoliodata.json?v="+new Date().getTime(), onJsonLoadHandler);
		//req = DonavonWest.Network.createJsonRequest("portfoliodata.json", onJsonLoadHandler, null, 15*1000);
		//req.addHeader("If-Modified-Since", "Thu, 1 Jan 1970 00:00:00 GMT"); //defeat any cache
		req = new DonavonWest.Network.createJsonRequest(postUrl, onJsonLoadHandler); //server was set to never cache

		//setTimeout(req.execute, 1000); //just to show "loading" for at least 1 sec. I wouldn't do this in a "real" production app
		req.execute();
	}
	

	//called immediately after the Blogger object is instantiated (by DonavonWest.Utils.bind)
	that.initialize = function() {
		var el;
		
		//shortcuts
		createElement = DonavonWest.Utils.createElement;
		createBaseButton = DonavonWest.UI.createBaseButton;
		
		element = createElement(div, "DonavonWest_Blogger"); //create our Blogger container
		p_el.appendChild(element);
		
		//build our markup
		var clientAreaEl = createElement(div, "client_area");
		element.appendChild(clientAreaEl);
		
		welcomeEl = createElement(div, "welcome");
		clientAreaEl.appendChild(welcomeEl);

			textAreaEl = createElement(div, "text-area"); //welcome message is loaded via JSON
			welcomeEl.appendChild(textAreaEl);

			instructionsEl = createElement(div, "instructions-area");
			welcomeEl.appendChild(instructionsEl);

		
		
		//the reload button (in case of an Ajax load error)
		reloadButton = createBaseButton(clientAreaEl, "reload-button", "Try Again", reloadButtonHandler);
		reloadButton.hide();
		
		//and the close button
		closeButton = createBaseButton(element, "close-button", "Close", closeButtonHandler);

		//displayItem(); //display the intro page (WITHOUT navigation buttons)

		loadBlogger();  //initiate an Ajax load of the blogger data
		
	};	


	//called when the Blogger object is non longer needed. Here we dismantle everything we built
	that.dispose = function() {

		//if in the middle of a JSON request, shut it down	
		if (req) {
			req.abort();
			req = null;
		}
		
		//cleanup the butons
		closeButton.dispose();
		reloadButton.dispose();

		//remove our main node from the DOM
		p_el.removeChild(element);

		//pack it in/pack it out
		that = req = createElement = createBaseButton = element = closeButton = reloadButton = instructionsEl = welcomeEl = textAreaEl = that.onClose = null;
	};

	//constructor
	//(none needed)
	
};
