// this one works great in ie and firefox

var hline_Offset = 0; // offset of current news item to read from file
var hline_Max = 5; // max number of news items to read from file
var hline_Max_Disp = 3; // max number of news items to show
var hline_Cur_Disp = 1; // current number displayed
//var scroll_type = "v"; // h = horizontal   v = vertical
//var ss = 25; //width or height of scroll item (depending on scroll_type
var scroll_type = "h"; // h = horizontal   v = vertical
var ss = 275; //width or height of scroll item (depending on scroll_type)
var easing = "off"; 
var speed = 2; // only applies if easing is off
var fading = true; // whether to change opacity or not
var ct = 0; // use this to track topitem pos, as style.top cant hold floating point, which means we never get to 1!
var txh = 50; // text height (only applies in h mode)
var text_align = 'center'; // how the text is aligned inside the divs for each item
var pause_between_calls = 10000; // milliseconds to wait before reading a new headline
var pause = false; // do not change
var pause_on_mouseover = true;
// write out the initial divs
document.write('<div id="tickerdiv" style="position:relative; overflow:hidden;"><div id="topitem""></div>');
for(var i = 1; i <= hline_Max_Disp; i++){
	document.write('<div id="nextitem" style="position:relative"></div>');
	}
document.write('</div>');

// AJAX vars
var requobj;


// Detect Browser
var browser = ""; 

var ua = navigator.userAgent.toLowerCase(); 
if ( ua.indexOf( "opera" ) != -1 ) { 
browser = "opera"; 
} else if ( ua.indexOf( "msie" ) != -1 ) { 
browser = "msie"; 
} else if ( ua.indexOf( "safari" ) != -1 ) { 
browser = "safari"; 
} else if ( ua.indexOf( "mozilla" ) != -1 ) { 
if ( ua.indexOf( "firefox" ) != -1 ) { 
browser = "firefox"; 
} else { 
browser = "mozilla"; 
} 
} 


// Timeout handles
var stime;
var sotime;
var ttime;

if(pause_on_mouseover){
	document.getElementById('tickerdiv').onmouseover = function(){
		pause = true;
		window.clearTimeout(stime);
		window.clearTimeout(sotime);
		window.clearTimeout(ttime);
		}
	document.getElementById('tickerdiv').onmouseout = function(){
		pause = false;
		sotime = setTimeout('scroll_out_now()',60);
		}
	}
function urlDecode(str){
    str=str.replace(new RegExp('\\+','g'),' ');
    return unescape(str);
}
function createRequestObject(){
	var request_o; 
	if(browser == "msie"){
		request_o = new ActiveXObject("Microsoft.XMLHTTP");
	} else {
		request_o = new XMLHttpRequest();
	}
	return request_o;
}
function display_next_headline(){
	/* Make sure that the transaction has finished. The XMLHttpRequest object 
		has a property called readyState with several states:
		0: Uninitialized
		1: Loading
		2: Loaded
		3: Interactive
		4: Finished */
	if(headlines.readyState == 4){ //Finished loading the response
		var XMLdoc = headlines.responseXML.documentElement;
		var date = XMLdoc.getElementsByTagName('date');
		var headline =XMLdoc.getElementsByTagName('headline');
		var linkid = XMLdoc.getElementsByTagName('linkid');
		date = date[0].childNodes[0].nodeValue;
		headline =  urlDecode(headline[0].childNodes[0].nodeValue);
		linkid = linkid[0].childNodes[0].nodeValue;
		var news_href = document.createElement('a');
		if(linkid > 0){
			news_href.setAttribute('href','news_article.php?id='+linkid);
			} else {
			news_href.setAttribute('href','#');
			}
		var headbold = document.createElement('b');
		var datetxt = document.createTextNode(date);
		headbold.appendChild(datetxt);
		var headtxt = document.createTextNode(' - '+headline);
		var txt = document.createElement('div');
		txt.setAttribute('position','relative');
		txt.appendChild(headbold);
		txt.appendChild(headtxt);
		news_href.appendChild(txt);		
		var s = document.createElement('div');
		s.style.textAlign = text_align;
		s.setAttribute('id','currentscroll');
		s.style.position = 'relative';
		if(scroll_type == "v"){
			s.style.top =  ss+'px';
			s.style.marginBottom = (0-ss)+'px';
			s.style.height = ss+'px';
		} else {
			s.style.left = ss+'px';
			s.style.marginBottom = (0-txh)+'px';
			s.style.height = txh+'px';
			s.style.width = ss+'px';
			}
		s.className = 'tickeritem';
		
		if(fading){
			switch(browser){
				case "msie":
				s.style.filter='Alpha(Opacity=0)';
				break;
				case "firefox":
				s.style.MozOpacity = 0;
				break;
				default:
				s.style.opacity = 0;
				}
			}
		s.appendChild(news_href);	
		// remove top
		document.getElementById('topitem').parentNode.removeChild(document.getElementById('topitem'));
		document.getElementById('tickerdiv').childNodes[0].setAttribute('id','topitem');
		document.getElementById('topitem').style.top = '0px';
		ct = 0;
		// add new at bottom
		document.getElementById('tickerdiv').appendChild(s);		
		scroll_out_now();
	}
}


function get_headline(reqobj){
	//window.clearTimeout(ttime);
	hline_Offset = (hline_Offset >= hline_Max)?0:hline_Offset;
	var r = Math.random(5);
	reqobj.open('get', 'includes/get_headline.php?offset='+hline_Offset+'&rand='+r);
	// Define a function to call once a response has been received. This will be our handle function that we define below.
	reqobj.onreadystatechange = display_next_headline; // NOTE: You cannot pass a value with this function as IE returns a type mismatch due to some kind of bug.  We can get around this by making reqobj global
	reqobj.send(null);
	hline_Offset ++;
}




function scroll_out_now(){
	    var s = document.getElementById('topitem');		
		var dist = ss * 1 + ct;
		if(dist >= 1){ // always stops at 9 when easing is on for some reason?
			dist = (easing == 'on')?dist*0.9:dist-speed;
			if(scroll_type=="v"){
				ct = (0-ss) + dist;
				s.style.top = parseInt(ct)+'px';
				var dl = document.getElementById('tickerdiv').childNodes.length;
				for(var d=0; d < dl; d++){
					document.getElementById('tickerdiv').childNodes[d].style.top = parseInt(s.style.top) + (ss*d) +'px';
					if(fading){
						// set opacity
						if(d == 0){ // fade out top item
							switch(browser){
								case "msie":
								s.style.filter='Alpha(Opacity='+((parseInt(dist))/ss)*100+')';
								break;
								case "firefox":
								s.style.MozOpacity = ((parseInt(dist))/ss);
								break;
								default:
								s.style.opacity = 0;
								}
							}
						if(d == dl-1){ // fade in bottom item
							switch(browser){
								case "msie":
								document.getElementById('tickerdiv').childNodes[d].style.filter='Alpha(Opacity='+((ss-parseInt(dist))/ss)*100+')';
								break;
								case "firefox":
								document.getElementById('tickerdiv').childNodes[d].style.MozOpacity = ((ss-parseInt(dist))/ss);
								break;
								default:
								document.getElementById('tickerdiv').childNodes[d].style.opacity = ((ss-parseInt(dist))/ss);
								}
							}
						}

					}
				} else {
				ct = (0-ss) + dist;
				s.style.left = parseInt(ct)+'px';
				var dl = document.getElementById('tickerdiv').childNodes.length;
				for(var d=0; d < dl; d++){
					document.getElementById('tickerdiv').childNodes[d].style.left = parseInt(s.style.left) + (ss*d) +'px';
					if(fading){
						// set opacity
						if(d == 0){ // fade out top item
							switch(browser){
								case "msie":
								s.style.filter='Alpha(Opacity='+((parseInt(dist))/ss)*100+')';
								break;
								case "firefox":
								s.style.MozOpacity = ((parseInt(dist))/ss);
								break;
								default:
								s.style.opacity = 0;
								}
							}
						if(d == dl-1){ // fade in bottom item
							switch(browser){
								case "msie":
								document.getElementById('tickerdiv').childNodes[d].style.filter='Alpha(Opacity='+((ss-parseInt(dist))/ss)*100+')';
								break;
								case "firefox":
								document.getElementById('tickerdiv').childNodes[d].style.MozOpacity = ((ss-parseInt(dist))/ss);
								break;
								default:
								document.getElementById('tickerdiv').childNodes[d].style.opacity = ((ss-parseInt(dist))/ss);
								}
							}
						}

					}
				}
				if(!pause){
				sotime = setTimeout('scroll_out_now()',10);
				}
			}  else {
				ttime = setTimeout('get_headline(headlines)',pause_between_calls);
				}
		}

var headlines = createRequestObject();
get_headline(headlines);
