﻿/* 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,
width : "1000px",
autofillheight : "body",
height : (document.documentElement.clientHeight * 0.9) + "px",
zIndex : 0,
close : true,
draggable : false,
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;
}

});

})();

