function createAjaxObj() {
var httprequest = false;
if (window.XMLHttpRequest) { // if Mozilla, Safari etc
httprequest = new XMLHttpRequest();
if (httprequest.overrideMimeType) {
httprequest.overrideMimeType('text/xml');
}
}
else if (window.ActiveXObject) { // if IE
try {
httprequest = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e) {
try {
httprequest = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e) {}
}
}
return httprequest;
}
// -------------------------------------------------------------------
// Main Ajax Ticker Object function
// ajax_ticker(xmlfile, divId, divClass, delay, optionalfadeornot)
// -------------------------------------------------------------------
function ajax_ticker(xmlfile, divId, divClass, delay, fadeornot) {
this.xmlfile = xmlfile; //Variable pointing to the local ticker xml file (txt)
this.tickerid = divId; //ID of ticker div to display information
this.delay = delay; //Delay between msg change, in miliseconds.
this.mouseoverBol = 0; //Boolean to indicate whether mouse is currently over ticker (and pause it if it is)
this.pointer = 0;
this.opacitystring = (typeof fadeornot != "undefined") ? "width: 100%; filter:progid:DXImageTransform.Microsoft.alpha(opacity=100); -moz-opacity: 1": "";
if (this.opacitystring != "") this.delay += 500; //add 1/2 sec to account for fade effect, if enabled
this.opacitysetting = 0.2; //Opacity value when reset. Internal use.
this.messages = []; //Arrays to hold each message of ticker
this.ajaxobj = createAjaxObj();
document.write('
');
this.getXMLfile();
}
// -------------------------------------------------------------------
// getXMLfile()- Use Ajax to fetch xml file (txt)
// -------------------------------------------------------------------
ajax_ticker.prototype.getXMLfile = function() {
if (this.ajaxobj) {
var instanceOfTicker = this;
var url = this.xmlfile + "?bustcache=" + new Date().getTime();
this.ajaxobj.onreadystatechange = function() {
instanceOfTicker.initialize();
}
this.ajaxobj.open('GET', url, true);
this.ajaxobj.send(null);
}
}
// -------------------------------------------------------------------
// initialize()- Initialize ticker method.
// -Gets contents of xml file and parse it using JavaScript DOM methods
// -------------------------------------------------------------------
ajax_ticker.prototype.initialize = function() {
//if request of file completed
if (this.ajaxobj.readyState == 4) {
//if request was successful
if (this.ajaxobj.status == 200 || window.location.href.indexOf("http") == - 1) {
//div of inner content that holds the messages
this.contentdiv = document.getElementById(this.tickerid).firstChild;
var xmldata = this.ajaxobj.responseText;
this.contentdiv.style.display = "none";
this.contentdiv.innerHTML = xmldata;
if (this.contentdiv.getElementsByTagName("div").length == 0) {
this.contentdiv.innerHTML = "Error fetching remote ticker file!";
return;
}
var instanceOfTicker = this;
document.getElementById(this.tickerid).onmouseover = function() {
instanceOfTicker.mouseoverBol = 1;
}
document.getElementById(this.tickerid).onmouseout = function() {
instanceOfTicker.mouseoverBol = 0;
}
if (window.attachEvent) { //Clean up loose references in IE
window.attachEvent("onunload", function() {
instanceOfTicker.contentdiv = instanceOfTicker.ajaxobj = null
});
}
// Cycle through XML object and store each message inside array
for (var i = 0; i < this.contentdiv.getElementsByTagName("div").length; i++)
{
if (this.contentdiv.getElementsByTagName("div")[i].className == "message")
{
this.messages[this.messages.length] =
this.contentdiv.getElementsByTagName("div")[i].innerHTML;
}
}
this.contentdiv.innerHTML = "";
this.contentdiv.style.display = "block";
this.rotatemsg();
}
}
}
// -------------------------------------------------------------------
// rotatemsg()- Rotate through ticker messages and displays them
// -------------------------------------------------------------------
ajax_ticker.prototype.rotatemsg = function() {
var instanceOfTicker = this;
if (this.mouseoverBol == 1 ) { //if mouse is currently over ticker, do nothing (pause it)
setTimeout(function() { instanceOfTicker.rotatemsg() }, 100);
}
else { //else, construct item, show and rotate it!
this.fadetransition("reset") //FADE EFFECT- RESET OPACITY
this.contentdiv.innerHTML = this.messages[this.pointer];
this.fadetimer1 = setInterval(function() {
instanceOfTicker.fadetransition('up', 'fadetimer1');
},
100); //FADE EFFECT- PLAY IT
this.pointer = (this.pointer < this.messages.length - 1) ? this.pointer + 1: 0;
setTimeout(function() {
instanceOfTicker.rotatemsg();
},
this.delay); //update container periodically
}
}
// -------------------------------------------------------------------
// fadetransition()- cross browser fade method for IE5.5+ and Mozilla/Firefox
// -------------------------------------------------------------------
ajax_ticker.prototype.fadetransition = function(fadetype, timerid) {
var contentdiv = this.contentdiv;
if (fadetype == "reset") this.opacitysetting = 0.2;
if (contentdiv.filters && contentdiv.filters[0]) {
if (typeof contentdiv.filters[0].opacity == "number") { //IE6+
contentdiv.filters[0].opacity = this.opacitysetting * 100;
}
else { //IE 5.5
contentdiv.style.filter = "alpha(opacity=" + this.opacitysetting * 100 + ")";
}
}
else if (typeof contentdiv.style.MozOpacity != "undefined" && this.opacitystring != "") {
contentdiv.style.MozOpacity = this.opacitysetting;
}
else this.opacitysetting = 1;
if (fadetype == "up") this.opacitysetting += 0.1;
if (fadetype == "up" && this.opacitysetting >= 1) clearInterval(this[timerid]);
}