﻿// JScript File

// ------------------------------
// setup global variables

//var refreshRate; //number of minutes between quote reloads
//var quoteItems; //array of quote items
//var quoteTimer; //timeout object for reading quotes
//var item; //currently selected item (for flyout)
//var scrollTimer; //interval object for display scroller
//var scrollOuterEl; //outer scroll element
//var scrollEl; //inner scroll element
//var sliderCurrent; //left position (in pixels) of the scrollEl within scrollOuterEl


var DHTML = (document.getElementById || document.all || document.layers);

function getObj(name)
{
  if (document.getElementById)
  {
  	this.obj = document.getElementById(name);
	this.style = document.getElementById(name).style;
  }
  else if (document.all)
  {
	this.obj = document.all[name];
	this.style = document.all[name].style;
  }
  else if (document.layers)
  {
   	this.obj = document.layers[name];
   	this.style = document.layers[name];
  }
}

// called roughtly every 20 msecs (in fast mode) or 250 msecs (in slow mode)
// to scrolls the headline ticker
function scrollDisplay() {
	var i, el, ul, li;

	if (sliderCurrent == undefined || sliderCurrent == scrollEl.scrollWidth*-1) {
		if (quoteItems != null && quoteItems != undefined && quoteItems.length > 0) {

			//build news feed DIV
			scrollEl.innerHTML = "";
			
			el = document.createElement("span");
			el.className = "heading";
			el.innerHTML = "Altavest Quotes";   //LOCAL.topStories;
			scrollEl.appendChild(el);

			ul = document.createElement("ul");
			scrollEl.appendChild(ul);
			
			for (i=0; i<quoteItems.length; i++) {
				li = document.createElement("li");
				li.innerHTML = "<a target='_blank' href='" + quoteItems[i].link + "'>" +  quoteItems[i].text + "</a>"; //.title);
				//li.onclick = "window.location='" + quoteItems[i].link + "'";  //getClickFn(quoteItems[i].link);
				ul.appendChild(li);
			}
		}
		sliderCurrent = scrollOuterEl.clientWidth; //width of the RSS feed DIV or "Loading" string
	}
	sliderCurrent = sliderCurrent -1;
	scrollEl.style.left = sliderCurrent+"px";

}

// called when the user hovers over the scroll area
// setup the scroll timer in "slow" mode
function setHover() {
	if (scrollTimer) {
		clearInterval(scrollTimer);
	}
	scrollTimer = setInterval(scrollDisplay, 150); //setup the scroll timer (slow)
}

// called when the user moves out of the scroll area
// setup the scroll timer in "normal" mode
function clearHover() {
	if (scrollTimer) {
		clearInterval(scrollTimer);
	}
	scrollTimer = setInterval(scrollDisplay, 10); //setup the scroll timer (normal)
}

// called when the gadget unloads
function pageUnload() {
    window.detachEvent("onunload", pageUnload);

	//shut down timers (if running)
	if (quoteTimer) {
		clearTimeout(quoteTimer);
		quoteTimer=null;
	}
	if (scrollTimer) {
		clearInterval(scrollTimer);
		scrollTimer=null;
	}

	//unhook mouse over/out events
	scrollOuterEl.detachEvent("onmouseover", setHover);
	scrollOuterEl.detachEvent("onmouseout", clearHover);

	quoteItems = item = scrollEl = scrollOuterEl = null;
}

// called when the gadget loads
function pageLoad() {
    window.detachEvent("onload", pageLoad);
	window.attachEvent("onunload", pageUnload);
	
	var el, tickerObj, tickerEl;

    //	quoteItems = []; //setup an empty array for the RSS feed items

    // setup quoteTimer
	if (quoteTimer) {
		clearTimeout(quoteTimer);
		//quoteTimer = setTimeout(getFeed, 1000*60*60*refreshRate); //reload again in an X minutes
		quoteTimer = setTimeout(getFeed, 1000*60*refreshRate); //reload again in an X minutes
	}

    //tickerEl = document.getElementById("ticker"); //get the container
    tickerObj = new getObj("ticker");
    tickerEl = tickerObj.obj;

	//dynamically create our content
	scrollOuterEl = document.createElement("div");
	scrollOuterEl.className = "sliderOuter";
	scrollOuterEl.attachEvent("onmouseover", setHover);
	scrollOuterEl.attachEvent("onmouseout", clearHover);
	tickerEl.appendChild(scrollOuterEl);

	scrollEl = document.createElement("div");
	scrollEl.className = "slider";
	scrollEl.innerHTML = "Loading...";  //LOCAL.loading;
	scrollOuterEl.appendChild(scrollEl);

	el = document.createElement("div"); //create fade left/right PNG overlays
	el.className = "fadeLeft";
	scrollOuterEl.appendChild(el);

	el = document.createElement("div");
	el.className = "fadeRight";
	scrollOuterEl.appendChild(el);

	getFeed(); //start loading the quote feed
	clearHover(); //setup the scroll timer

	//skip on gadget initialization
	if (quoteTimer) {
		clearTimeout(quoteTimer);
		quoteTimer = setTimeout(getFeed, 1000*60*60*refreshRate); //reload again in an X hours
	}

	el = tickerEl = null;
}

// called after the quote file is loaded
function onXmlReturnHandler(xdoc) {

	var n, node, nodes, item;
	quoteItems = []; //clear the old array
	try {
		nodes = xdoc.selectNodes("/rss/channel/item");
		for (n=0; n < nodes.length; n++){
			node = nodes[n];
			item = {};
			item.title = node.selectSingleNode('title').text;
			item.link = node.selectSingleNode('link').text;
			item.description = node.selectSingleNode('description').text;
			item.creator = node.selectSingleNode('dc:creator').text;
			quoteItems.push(item);
		}
	} catch(ex) {}
	nodes = item = xdoc = null;
	//setup timer to load again
	//quoteTimer = setTimeout(getFeed, 1000*60*60*refreshRate); //reload again in an X hours
	quoteTimer = setTimeout(getFeed, 1000*60*refreshRate); //reload again in an X hours
}

// called once every hour to load a new RSS feed
function getFeed() {
	//shut down feed timer (if running)
	if (quoteTimer) {
		clearTimeout(quoteTimer);
		quoteTimer=null;
	}

	//setup timer to load again
	//quoteTimer = setTimeout(getFeed, 1000*60*60*refreshRate); //reload again in an X hours
	quoteTimer = setTimeout(getFeed, 1000*60*refreshRate); //reload again in an X hours

}


// ------------------------------
// this gets everything started after the DOM is created
window.attachEvent("onload", pageLoad);















