var exchangeList = function(){
	this.exchgContainer = Element.get("otherExchgContainer");
	this.exchgLink = Element.get("otherExchgLink");
	this.elListContainer = Element.create('div', {id:'otherExchgList'}, '', this.exchgContainer);//style:'width:220px;'this.exchgContainer
	this.active = false;
	this.cBuffer = new ContentBuffer();
	this.serializer = new Serializer();
	this.timeOut = null;
}

exchangeList.prototype.AttachEvents = function(){

	Events.add({
		element:this.exchgLink,
		type:"click",
		handler:this.GetExchangeList,
		context:this
	});
	Events.add({
		element: this.exchgLink,
		type: "mouseout",
		handler:  this.HideExchangeList,
		context: this
	});
	
	Events.add({
		element: this.elListContainer,
		type: "mouseout",
		handler: this.HideExchangeList,
		context: this
	});
	Events.add({
		element: this.elListContainer,
		type: "mouseover",
		handler: this.ShowExchangeList,
		context: this
	});
	
}

exchangeList.prototype.HideExchangeList = function(e, el){

	//console.log("HideExchangeList");
	
	//Tries to determine if bridge is defined, if not, it defines bridge as
	//a dummy object
	try{
		bridge.active;
	}
	catch(e){
		bridge = new function(){};
	}
	
	
	//tries to determine if infoDiv is available on the page.
	try{
	el = Element.get("infoDiv");
	Element.setStyle(el,"display: block;");
	el = Element.get("divZoom");
	Element.setStyle(el,"display: block;");
	}catch(e){}
	
	var self = this;
	if(this.elListContainer.hasChildNodes()){
		this.timeOut = window.setTimeout(function()
		{
			self.elListContainer.style.display = "none";
			bridge.active = false;
			//console.log("closing...");
		}, 100);
	}
	Events.cancel(e);
}
exchangeList.prototype.ShowExchangeList = function(e, el){
	if (this.timeOut)
	{
	//	console.log("clearing timeout");
		window.clearTimeout(this.timeOut);
	}
	//Tries to determine if bridge is defined, if not, it defines bridge as
	//a dummy object
	try{
		bridge.active;
	}
	catch(e){
		bridge = new function(){};
	}
	
	//tries to determine if infoDiv is available on the page.
	try{
		el = Element.get("infoDiv");
		Element.setStyle(el,"display: none;");
		el = Element.get("divZoom");
		Element.setStyle(el,"display: none;");
	}catch(e){}
	
	if(this.elListContainer.hasChildNodes()){
		this.elListContainer.style.display = "block";
		bridge.active = true;
	}
	Events.cancel(e);
}

exchangeList.prototype.GetExchangeList = function(e, el){
	try{
		el = Element.get("infoDiv");
		Element.setStyle(el,"display: none;");
		el = Element.get("divZoom");
		Element.setStyle(el,"display: none;");
	}catch(e){}
	
	if(this.elListContainer.hasChildNodes()){
		this.elListContainer.style.display = "block";
	}
	else{
		var elHeader = Element.create('div', {id:"listHeader"}, '', this.elListContainer);
		Element.create('div', {className:"exchgSymbol"}, 'Symbol', elHeader);
		Element.create('div', {className:"exchgName"}, 'Exchange', elHeader);
		Element.create('div', {className:"clear"}, '', elHeader);
		this.caption = Element.create('div', {id:"captionDiv", className:"smGreyTxt", style:"text-align:center;padding:5px 0;"}, 'Loading...', this.elListContainer);
		
		this.elListContainer.style.display = "block";
		
		this.cBuffer.load({
			url: "/businessweek/research/common/buffer/exchangelist_buffer.asp",
			contentType: "text/javascript",
			onload: this.BuildExchangeList,
			onerror: this.ListError,
			method: "post",
			context: this
		});
	}
	Events.cancel(e);
}

exchangeList.prototype.BuildExchangeList = function(buffer){
	// check if anything was returned from the buffer
	if(buffer){
		var results = this.serializer.deserialize(buffer.getResult());
	}
	
	// check if the results deserialized
	if(results && results.listItem.length > 0){
		
		Element.remove(this.caption);
		
		for(var i = 0; i < results.listItem.length; i++){
			var elListItem = Element.create('div', {className:"listItem"}, '', this.elListContainer);
			var elLink = Element.create('a', {href:'../../stocks/snapshot/snapshot.asp?symbol=' + results.listItem[i].symbol}, results.listItem[i].symbol);
			var elLinkContainer = Element.create('div', {className:"exchgSymbol"}, elLink, elListItem);
			var elExchgContainer = Element.create('div', {className:"exchgName"}, results.listItem[i].name, elListItem);
			Element.create('div', {className:"clear"}, '', elListItem);
			
			if(i >= 10){
				this.elListContainer.style.height = "260px";
				this.elListContainer.style.overflow = "auto";
			}
		}
	}
	else{
		if(results.currentSymbol == undefined){
			results.currentSymbol = "This symbol";
		}
		this.caption.innerHTML = results.currentSymbol + ' is not on other exchanges';
	}
	
	var listItems = this.elListContainer.getElementsByTagName("div");
	if(listItems.length > 0){
		for(var i = 0; i < listItems.length; i++){
			if(listItems[i].className == 'listItem'){
				Events.add({
					element: listItems[i],
					type:"mouseover",
					handler:this.HighLiteRow,
					context:this
				});
				
				Events.add({
					element: listItems[i],
					type:"mouseout",
					handler:this.UnHighLiteRow,
					context:this
				});
				
				Events.add({
					element: listItems[i],
					type:"click",
					handler:this.GoToSnapShot,
					context:this
				});
			}
		}
	}
	if (bridge.active = true)
	{
		this.elListContainer.style.display = "block";
	}
}

exchangeList.prototype.ListError = function(){
	if(results.currentSymbol == undefined){
		results.currentSymbol = "This symbol";
	}
	this.caption.innerHTML = results.currentSymbol + ' is not on other exchanges';
}

// add the background hover color
exchangeList.prototype.HighLiteRow = function(e, el){
	el.className = el.className + ' listItemHover';
	var children = el.childNodes;
	if(children.length > 0){
		for(var i = 0; i < children.length; i++){
			children[i].className = children[i].className + ' listItemHover';
		}
	}
}
// remove the background hover color
exchangeList.prototype.UnHighLiteRow = function(e, el){
	el.className = 'listItem';
	var children = el.childNodes;
	if(children.length > 0){
		for(var i = 0; i < children.length; i++){
			children[i].className = children[i].className.replace(' listItemHover', '');
		}
	}
}
// make the whole row act as a link
exchangeList.prototype.GoToSnapShot = function(e, el){
	var link = el.getElementsByTagName("a");
	if(link.length > 0){
		for(var i = 0; i < link.length; i++){
			if(link[i].getAttribute('href')){
				window.location.href = link[i].href;
			}
		}
	}
}

// on page load actions
function InitExchangeList(){
	var exchgList = new exchangeList();
	if(exchgList.exchgLink){
		exchgList.AttachEvents();
	}
}

Events.add({
	element: window,
	type:	"load",
	handler: InitExchangeList
});