// -------------------------------------------------------------------
// Ajax XML Ticker (txt file source)
// Author: Dynamic Drive (http://www.dynamicdrive.com)
// -------------------------------------------------------------------

////////////No need to edit beyond here//////////////

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('<div id="'+divId+'" class="'+divClass+'"><div style="'+this.opacitystring+'">Initializing                    ticker...</div></div>');
   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 (this.ajaxobj.readyState == 4){ //if request of file completed
      if (this.ajaxobj.status==200 || window.location.href.indexOf("http")==-1){ //if request was successful
         this.contentdiv=document.getElementById(this.tickerid).firstChild; //div of inner content that holds the messages
         var xmldata=this.ajaxobj.responseText;
         this.contentdiv.style.display="none";
         this.contentdiv.innerHTML=xmldata;
         if (this.contentdiv.getElementsByTagName("div").length==0){ //if no messages were found
            this.contentdiv.innerHTML="<b>Error</b> 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]);
}


function alertSize() {
  var myWidth = 0, myHeight = 0;
  if( typeof( window.innerWidth ) == 'number' ) {
    //Non-IE
    myWidth = window.innerWidth;
    myHeight = window.innerHeight;
  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    //IE 6+ in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
    myHeight = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    //IE 4 compatible
    myWidth = document.body.clientWidth;
    myHeight = document.body.clientHeight;
  }
  window.alert( 'Width = ' + myWidth );
  window.alert( 'Height = ' + myHeight );
}

function getScrollXY() {
  var scrOfX = 0, scrOfY = 0;
  if( typeof( window.pageYOffset ) == 'number' ) {
    //Netscape compliant
    scrOfY = window.pageYOffset;
    scrOfX = window.pageXOffset;
  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
    //DOM compliant
    scrOfY = document.body.scrollTop;
    scrOfX = document.body.scrollLeft;
  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
    //IE6 standards compliant mode
    scrOfY = document.documentElement.scrollTop;
    scrOfX = document.documentElement.scrollLeft;
  }
  return [ scrOfX, scrOfY ];
}

