/*  Advisor.previewer.js - Previews an example article in a modal window
	! No dependencies on Advisor JavaScript, only YAHOO lib dependencies
*/

(function(){

var q = YAHOO.util.Selector.query,
	Conn = YAHOO.util.Connect,
	Event = YAHOO.util.Event,
	Dom = YAHOO.util.Dom;

var previewInstance;

var previewTypes = {
	AOTC: {	title : 'Ahead of the Curve',
			articleUrl : '/CorporateWebsite/AdvisorSample/AOTC.htm' },
	EGS	: {	title : 'Emerging Growth Stocks',
			articleUrl : '/CorporateWebsite/AdvisorSample/EGS.htm' },
	ETFA: {	title : 'ETF Advisor',
			articleUrl : '/CorporateWebsite/AdvisorSample/ETFA.htm' },
	ITR : {	title : 'Insider Trading Report',
			articleUrl : '/CorporateWebsite/AdvisorSample/ITR.htm' },
	TI	: {	title : 'Taking Issue',
			articleUrl : '/CorporateWebsite/AdvisorSample/TI.htm' },
	TA	: {	title : 'Technical Advisor',
			articleUrl : '/CorporateWebsite/AdvisorSample/TA.htm' },
	BO	: {	title : 'Economic Outlook',
			articleUrl : '/CorporateWebsite/AdvisorSample/BO.htm' },
	MO	: {	title : 'Market Overview',
			articleUrl : '/CorporateWebsite/AdvisorSample/MO.htm' },
	PO	: {	title : 'Page One',
			articleUrl : '/CorporateWebsite/AdvisorSample/PO.htm' },
	WIP	: {	title : 'Week In Perspective',
			articleUrl : '/CorporateWebsite/AdvisorSample/WIP.htm' },
	TBP	: {	title : 'The Big Picture',
			articleUrl : '/CorporateWebsite/AdvisorSample/TBP.htm' }
};

window.Advisor = (window.Advisor || {});
window.Advisor.previewer = {};

Advisor.previewer.show = function(previewType) {
	if (!previewInstance) {
		previewInstance = new Advisor.previewer.PreviewPane();
		previewInstance.render();
	}
	
	previewInstance.showPreviewForType(previewType);
};

Advisor.previewer.PreviewPane = function(config){
	config = config || {};
	this._el = this._generateEl();

	YAHOO.lang.augmentObject(
		config, 
		{
			fixedcenter: true,
			visible : false,
			width : "1000px",
			autofillheight : "body",
			height : (document.documentElement.clientHeight * 0.9) + "px",
			zIndex : 0,
			close : true,
			draggable : false,
			modal : true,
			iframe: true
		}, 
		true
	);

	Advisor.previewer.PreviewPane.superclass.constructor.call(this, this._el, config);
	
	// register hide reader handler
	this.hideEvent.subscribe(this.onHideHandler);
};

YAHOO.extend(Advisor.previewer.PreviewPane, YAHOO.widget.Panel, {
	_el : null,
	
	showPreviewForType : function(previewType){
		if (!previewTypes[previewType]) { return; } // invalid type: do nothing
		
		//update height relative to current viewport size
		this.cfg.setProperty('height', (document.documentElement.clientHeight * 0.9) + "px");
		
		this.setTitle(previewTypes[previewType].title);
		this.getAndSetArticle(previewTypes[previewType].articleUrl);
		
		//show if not presently visible
		if (this.cfg.getProperty("visible") === false) {
			this.show();
		}
		
		this.hideOuterScrollbars();
	},
	
	onHideHandler : function(){
		this._clearStory();
		this.showOuterScrollbars();
	},
	
	_clearStory : function(){
		// clear current story
		q('#rp-content', this.body, true).innerHTML = "";
	},
	
	hideOuterScrollbars : function() {	
		if(document.body.scroll){
			document.body.scroll = "no";	// ie only
		}
		else{
			document.documentElement.style.overflow = 'hidden';	 // firefox, chrome		
		}
	},
	
	showOuterScrollbars : function() {
		if(document.body.scroll){
			document.body.scroll = "yes";	// ie only
		}
		else{
			document.documentElement.style.overflow = 'auto';	 // firefox, chrome		
		}
	},
	
	setTitle : function(title) {
		document.getElementById('rp-topic-title').innerHTML = title;
	},
	
	getAndSetArticle : function(articleUrl) {
		Dom.removeClass(q('#rp-content-loader', this.body, true), 'hidden');
		
		Conn.asyncRequest('GET', articleUrl,
			{
				success : this._setArticle,
				failure : this._requestFailure,
				cache : true,
				scope : this,
				argument : {requestName : 'Preview Article Content'}
			}
		);		
	},
	
	// Async response handler
	_setArticle : function(o){
		var storyEl = q('#rp-content', this.body, true);
		storyEl.innerHTML = o.responseText;
		
		storyEl.scrollTop = 0;
		
		Dom.addClass(q('#rp-content-loader', this.body, true), 'hidden');
	},
	
	_requestFailure : function(o){
		YAHOO.log(o.argument.requestName + ' request failed. Status code: ' + o.status + ' Status Msg: ' + o.statusText, 'error', 'User');
	},
	
	_generateEl : function() {
		var myEl = document.createElement("div");
		myEl.id = 'previewer';
		myEl.innerHTML = 
			'<div class="hd"></div>'+
			'<div class="bd">'+
				'<div id="rp-content-container">'+
					'<div id="rp-content-hd">'+
						'<div id="rp-topic-title"></div>'+
					'</div>'+
					'<div id="rp-content-loader">'+
						'<img src="/Common/images/Advisor/Reader/loader.gif" alt="loading..." />'+
					'</div>'+
					'<div id="rp-content"></div>'+
				'</div>'+
			'</div>';
		
		document.body.appendChild(myEl);
		return myEl;
	}
	
});

})();
