
// freechart.globeinvestor.com kennys1.globeinvestor.com
var env = "http://freechart.globeinvestor.com/servlet/charting";
var Chart_image = {
	"url" : env + "?",
	"chart_type" : "png",
	"chart_style" : "stock_price",
	"chart_plot_type" : "line",
	"line_colour" : "013197", /*"013197", 787878*/
	"lang" : "en",
	"chart_fg" : "B8860B",
	"chart_bg" : "FFFFFF",
	"img_bg" : "FFFFFF",
	"img_fg" : "5E5E5E",
	"price_open_colour" : "1E90FF",
	"chart_size" : "small",
	"x_scale" : "true",
	"showTitle" : "true",
	"showDate" : "true",
	"chart_width" : "230",
	"chart_height" : "140",
	"close_line" : "false", //when the chart period is INTRA set close_line to true,
	"showHeader" : "false",
	"showYTitle" : "false"
}

function Chart(options) {
	this.options = Object.extend({
				//is_story_page : false,
				//story_type : null,
				stylesheet_written : false
			}, options || {});
	
	this.article_holder = null;
	this.doc_root = null;
	this.spinner_image_url = null;
	this.popup_chart_stylesheet_url = null;
	this.ticker_symbol_url = null;
	this.inline_chart_url = null;
	
	this.story_type = this.determine_story_type();
	this.set_klass_level_variables();
	this.collect_companies_and_indexes();
}

Chart.prototype.determine_story_type = function() {
	var loc = location.href;
	var story_type = loc.split("/")[6];
	if (story_type.indexOf("Story") !=-1) {
		return story_type; // this is BNStory or anyother story type that follows the /servlet/story/archive.date.slug/StoryType convention
	} else { //this is a GIG story
		return "GIGStory";
	}
}

Chart.prototype.set_klass_level_variables = function() {
	if (this.story_type != "GIGStory") {
		this.article_holder = $('article');
	} else {
		this.article_holder = $('commentBody');
	}
	var base = location.href.split(".com")[0];
	if (base.indexOf(".globeinvestor") == -1) {
		this.doc_root = "/servlet/HTMLTemplate?tf=tgamv3";
		this.spinner_image_url = WEBSITE_IMAGES+"/v5/images/icon/icon-spinner.gif";
		this.popup_chart_stylesheet_url = WEBSITE_IMAGES+WEBSITE_docroot+"/data/styles/pop_up_chart.css";		
		this.ticker_symbol_url = this.doc_root + "/v5/data/charts/get_default_ticker_symbol.html\u0026id=";
		this.inline_chart_url = this.doc_root + "/v5/data/charts/inline_chart.html\u0026symbol=";				
	} else {
		this.doc_root = "/servlet/Page/document";
		this.spinner_image_url = "http://images.theglobeandmail.com/v5/images/icon/icon-spinner.gif";
		this.popup_chart_stylesheet_url = "http://images.theglobeandmail.com/v5/data/styles/pop_up_chart.css";		
		this.ticker_symbol_url = this.doc_root + "/v5/data/charts/get_default_ticker_symbol?id=";
		this.inline_chart_url = this.doc_root + "/v5/data/charts/inline_chart?sponsor=false&site=GIGold&symbol=";		
	}
}

Chart.prototype.collect_companies_and_indexes = function() {
	this.get_story_companies();
	this.get_story_indexes();		
}

Chart.prototype.get_story_companies = function() {
	var companies = $A(getElementsByClassName(this.article_holder, "span", "company"));
	if (companies.length > 0) {
		this.write_stylesheet();
		companies.each(function(DOM_company) {
			this.retrive_and_append_symbol(DOM_company);
		}.bind(this));
	}	
}

Chart.prototype.get_story_indexes = function() {
	var indexes = $A(getElementsByClassName(this.article_holder, "span", "index"));
	if (indexes.length > 0) {
		this.write_stylesheet();
		indexes.each(function(index) {
			var holder, index_ticker;
			index_ticker = index.className.split(" ")[1];
			holder = createElement("SPAN","","ticker");
			holder.appendChild(document.createTextNode(" \[" + index_ticker + "\]"));
			index.appendChild(holder);
			addEvent($(holder), "click", function(e) {
				e = e || window.event; 
				var mouseX = Event.pointerX(e),
						mouseY = Event.pointerY(e);
				this.display_inline({
					obj_DOM : index, 
					symbol : index_ticker,
					x_pos : mouseX,
					y_pos : mouseY					 
				});				 
			}.bind(this));
		}.bind(this));
	}	
}

Chart.prototype.write_stylesheet = function() {
	if (!this.stylesheet_written) {
		var head = document.getElementsByTagName("HEAD")[0];
		var stylesheet = createElement("link","","",this.popup_chart_stylesheet_url);
		head.appendChild(stylesheet);
		this.stylesheet_written = true;
	}
}
	
Chart.prototype.retrive_and_append_symbol = function(DOM_company) {
	var self = this;
	var holder, ticker, id, url, xhr;
	id = DOM_company.id.split("c-")[1];
	holder = createElement("SPAN","","ticker");
	url = this.ticker_symbol_url + id;
	xhr = hector();
	xhr.open("GET", url, true);
	xhr.onreadystatechange = function() {
		if (xhr.readyState == 4) {
			if (xhr.status == 200) {
				if (xhr.responseText.indexOf("javax") == -1) {
					holder.appendChild(document.createTextNode(" \[" + xhr.responseText + "\]"));
					$(DOM_company).appendChild(holder);
					addEvent(holder, "click", function(e) {
						e = e || window.event;
						var mouseX = Event.pointerX(e),
								mouseY = Event.pointerY(e);
						self.display_inline({
							obj_DOM: DOM_company,
							symbol : xhr.responseText,
							x_pos : mouseX, 
							y_pos : mouseY
						});
					});
				}
			}
		}
	}
	xhr.send(null);
}

Chart.prototype.display_inline = function(options) {
	var self = this;	
	self.options = Object.extend({
		obj_DOM : null,
		symbol : null,
		x_pos : null,
		y_pos : null,
		chart_url : self.inline_chart_url
	}, options || {});
	
	if ($("chart_holder")) {
		Element.remove($("chart_holder"));
	}	
	var spinner = createElement("img","spinner","",this.spinner_image_url,"Requesting data...",16,16);
	this.options.obj_DOM.appendChild(spinner);
	spinner.style.marginBottom = "-3px";
	Chart_image.symbol = self.options.symbol; //assign a symbol to the Chart_image object	
	
	var xhr = hector();
	xhr.open("GET", self.options.chart_url + self.options.symbol, true);
	xhr.onreadystatechange = function() {
		if (xhr.readyState == 4) {
			if (xhr.status == 200) {
				Element.remove($("spinner"));
				var obj = createElement("DIV", "chart_holder");
				obj.style.display = "none";
				obj.innerHTML = xhr.responseText;
				obj.style.left = self.options.x_pos + "px";
				obj.style.top = self.options.y_pos + "px";
				obj.style.zIndex = 999999;
				self.options.obj_DOM.appendChild(obj);
				self.add_chart_handlers_and_set_symbol(self.options.symbol);
				new Effect.SlideDown(obj, {duration: 0.2});
			}
		}
	}
	xhr.send(null);	
}

Chart.prototype.add_chart_handlers_and_set_symbol = function(symbol) {
	var periods = $A($("chart_period").getElementsByTagName("A"));
	var chart_periods = ["INTRA", "I5D5M", "1MTHD", "3MTHD", "1YRD"];
	new Draggable($("chart_holder"), { handle : $("chart_holder").getElementsByTagName("H3")[0] });
	
	periods.each(function(period, index) {
		period.chart = chart_periods[index];
		addEvent(period, "click", function() {
			$("stock_chart").src = Chart_image.url+"\u0026chart_type="+Chart_image.chart_type+"\u0026chart_style="+Chart_image.chart_style+"\u0026period="+this.chart+"\u0026chart_plot_type="+Chart_image.chart_plot_type+"\u0026symbol="+symbol+"\u0026line_colour="+Chart_image.line_colour+"\u0026lang="+Chart_image.lang+"\u0026chart_fg="+Chart_image.chart_fg+"\u0026chart_bg="+Chart_image.chart_bg+"\u0026img_bg="+Chart_image.img_bg+"\u0026img_fg="+Chart_image.img_fg+"\u0026price_open_colour="+Chart_image.price_open_colour+"\u0026chart_size="+Chart_image.chart_size+"\u0026x_scale="+Chart_image.x_scale+"\u0026showTitle="+Chart_image.showTitle+"\u0026showDate="+Chart_image.showDate+"\u0026chart_width="+Chart_image.chart_width+"\u0026chart_height="+Chart_image.chart_height+"\u0026showHeader="+Chart_image.showHeader+"\u0026showYTitle="+Chart_image.showYTitle;
			if (this.chart == "INTRA") { $("stock_chart").src += "\u0026close_line=true"; }
			periods.each(function(period) {
				period.className = "";
			});
			period.className = "selected";
			return false;
		});
	});
	addEvent($("close-chart"), "click", function() {
		Element.remove($("chart_holder"));
		return false;
	});
	//attach ge alert handler
	if ($("alert_add")) {
		addEvent($("alert_add"), "click", function() {
			this.create_ge_symbol_alert(symbol);
			return false;
		}.bind(this));
	} 
}

Chart.prototype.create_ge_symbol_alert = function(symbol) {
	//var url = WEBSITE_TGAM + "/servlet/Page/document/v5/templates/alert?action=add&symbol=" + symbol;
	var url = "/servlet/Page/document/v5/templates/alert?action=add&symbol=" + symbol;
	var xhr = hector();
	xhr.open("GET", url, true);
	xhr.onreadystatechange = function() {
		if (xhr.readyState == 4) {
			if (xhr.status == 200) {
				Element.remove($("quoteadd").childNodes[1].firstChild); //remove anchor
				if (xhr.responseText.indexOf("stockAdded") == -1) {
					$("quoteadd").childNodes[1].innerHTML = xhr.responseText;
				} else {
					$("quoteadd").childNodes[1].appendChild(document.createTextNode("E-mail alert for ticker symbol " + symbol + " has been added"));
				}
				new Effect.Highlight($("quoteadd"), {duration: 3.0});				
			}
		}
	}
	xhr.send(null);		
}

addEvent(window, "load", function() {
	//var loc = location.href;
	//var story_type = loc.split("/")[6];
	//if (story_type.indexOf("Story") != -1) {
	/*	var chart = new Chart({ 
			is_story_page : true,
			story_type : story_type
		});
	}*/
	var chart = new Chart();
});