// JavaScript Document

/*Example message arrays for the two demo scrollers*/

var pausecontent = new Array('Loading Vfast News...');
var ajaxurl = 'ajax.php';

function pausescroller(content, divId, divClass, delay) {
	this.content = content; //message array content
	this.divId = divId;
	this.divClass = divClass;
	this.delay = delay; //Delay between msg change, in miliseconds.
	
	var scroller = this;
	
	// Print the div to the screen
	document.write('<div id="' + this.divId + '" class="' + this.divClass + '" style="position: relative; overflow: hidden"><div class="innerDiv" style="position: absolute; width: 100%" id="' + this.divId + '1">' + this.content[0] + '</div><div class="innerDiv" style="position: absolute; width: 100%; visibility: hidden" id="' + this.divId + '2">' + this.content[1] + '</div></div>');
	
	this.mouseoverBol = 0; //Boolean to indicate whether mouse is currently over scroller (and pause it if it is)
	this.hiddendivpointer = 1; //index of message array for hidden div
	this.scrollerdiv = document.getElementById(divId); // The div the scroller is in
	
	_this = this; // Reference back to ourself
	
	// Load the scroller
	if (window.addEventListener) {
		//run onload in DOM2 browsers
		window.addEventListener("load", function(){_this.getData()}, false)
	} else if (window.attachEvent) {
		//run onload in IE5.5+
		window.attachEvent("onload", function(){_this.getData()})
	} else if (document.getElementById) {
		//if legacy DOM browsers, just start scroller after 0.5 sec
		setTimeout(function(){_this.getData()}, 500);
	}
}


pausescroller.prototype = {
	
	/**
	 * @name: init
	 * @desc: Initialises the scroller
	 */
	init: function () {
		// The hidden and visible divs
		this.divIdVisible = document.getElementById(this.divId+"1");
		this.divIdHidden = document.getElementById(this.divId+"2");
		
		// Get the top padding
		this.divIdVisibleTop = parseInt(this.getCSSpadding(this.scrollerdiv));
		
		//set width of inner DIVs to outer DIV's width minus padding (padding assumed to be top padding x 2)
		this.divIdVisible.style.width = this.divIdHidden.style.width = this.scrollerdiv.offsetWidth-(this.divIdVisibleTop*2) + 'px';
		this.getinline(this.divIdVisible, this.divIdHidden);
		
		this.divIdHidden.style.visibility = "visible"
		
		this.scrollerdiv.onmouseover=function(){_this.mouseoverBol = 1}
		this.scrollerdiv.onmouseout=function(){_this.mouseoverBol = 0}
		
		//Clean up loose references in IE
		if (window.attachEvent) {
			window.attachEvent("onunload", function(){_this.tickerdiv.onmouseover = _this.tickerdiv.onmouseout=null})
		}
		
		
		
		setTimeout(function(){_this.animateup()}, this.delay);
	},
	
	
	/**
	 * 
	 */
	animateup: function () {
		if (parseInt(this.divIdHidden.style.top)>(this.divIdVisibleTop+5)){
			this.divIdVisible.style.top = parseInt(this.divIdVisible.style.top)-5 + "px";
			this.divIdHidden.style.top = parseInt(this.divIdHidden.style.top)-5 + "px";
			setTimeout(function(){_this.animateup()}, 50);
		} else {
			this.getinline(this.divIdHidden, this.divIdVisible);
			this.swapdivs();
			setTimeout(function(){_this.setmessage()}, this.delay);
		}
	},
	
	
	/**
	 * 
	 */
	getCSSpadding: function (obj) {
		if (obj.currentStyle) {
			return obj.currentStyle["paddingTop"]
		} else if (window.getComputedStyle) { //if DOM2
			return window.getComputedStyle(obj, "").getPropertyValue("padding-top")
		} else {
			return 0;
		}
	},
	
	
	/**
	 * 
	 */
	swapdivs: function () {
		var tempcontainer=this.divIdVisible;
		this.divIdVisible=this.divIdHidden;
		this.divIdHidden=tempcontainer;
	},
	
	
	/**
	 * 
	 */
	getinline: function (div1, div2) {
		div1.style.top=this.divIdVisibleTop+"px"
		div2.style.top=Math.max(div1.parentNode.offsetHeight, div1.offsetHeight)+"px"
	},
	
	
	/**
	 * 
	 */
	setmessage: function () {
		if (this.mouseoverBol==1) {
			//if mouse is currently over scoller, do nothing (pause it)
			setTimeout(function(){_this.setmessage()}, 100)
		} else {
			var i = this.hiddendivpointer;
			var ceiling = this.content.length;
			this.hiddendivpointer=(i+1>ceiling-1)? 0 : i+1;
			this.divIdHidden.innerHTML = this.content[this.hiddendivpointer];
			this.animateup()
		}
	},
	
	
	/**
	 * 
	 */
	getAjax: function (url, callback) {
		// Create the XHR
		_this.request = (window.XMLHttpRequest)? new XMLHttpRequest(): new ActiveXObject("Microsoft.XMLHTTP");
		
		// Is there a callback function
		if (callback == null) {
			_this.request.onreadystatechange = function() {}
		} else {
			_this.request.onreadystatechange = callback;
		}
		
		// Only using GET
		_this.request.open('GET', url, true);
		_this.request.send(url);
	},
	
	
	/**
	 * 
	 */
	getData: function () {
		this.getAjax(ajaxurl, this.loadData);
	},
	
	
	/**
	 * 
	 */
	loadData: function () {
		if (_this.request.readyState == 4 && _this.request.status == 200) {	
			var resp = eval(_this.request.responseText);
			document.getElementById(_this.divId+"1").innerHTML = _this.content[0];
			document.getElementById(_this.divId+"2").innerHTML = _this.content[1];
			_this.init();
		} else {
			document.getElementById(_this.divId+"1").innerHTML = 'Loading...';
		}
	}
	
};
