
index_Image.restartDelay = 100; // delay onmouseout to restart rotation

index_Images = {}; // globally accessible reference to object 
function index_Image(id, bMouse) {
    this.id = id; 
    this.delay = []; 
    this.items = []; 
    this.ctr = 0; 
    this.timer = null;
    index_Images[this.id] = this; 
    this.animString = "index_Images." + this.id;
    if (bMouse) index_Image.setMouseEvents(this.id); // set up pause/resume onmouseover/out
};

index_Image.prototype.addItem = function(sHtml,delay) {
 	this.items[this.items.length] = sHtml;
 	this.delay[this.delay.length] = delay;
};

index_Image.prototype.rotate2 = function() {
    clearTimeout(this.timer); this.timer = null;
    var el = document.getElementById(this.id);
	var delay = this.delay[this.ctr];
    if ( el && typeof el.innerHTML != "undefined" ) {
	    var randomnumber=Math.floor(Math.random()*this.items.length)
        el.innerHTML = this.items[this.ctr];
		this.ctr = this.ctr + 1;
        if (this.ctr >= this.items.length-1) this.ctr = this.ctr - this.items.length;
        //else this.ctr = 0;
        this.timer = setTimeout(this.animString + ".rotate2()", delay);
    }
};

index_Image.prototype.rotate = function() {
    clearTimeout(this.timer); this.timer = null;
    var el = document.getElementById(this.id);
	var delay = this.delay[this.ctr];
    if ( el && typeof el.innerHTML != "undefined" ) {
	    var randomnumber=Math.floor(Math.random()*this.items.length)
        el.innerHTML = this.items[this.ctr];
		this.ctr = this.ctr + randomnumber;
        if (this.ctr >= this.items.length-1) this.ctr = this.ctr - this.items.length;
        //else this.ctr = 0;
        this.timer = setTimeout(this.animString + ".rotate()", delay);
    }
};

index_Image.prototype.rotate_in_order = function() {
    clearTimeout(this.timer); this.timer = null;
    var el = document.getElementById(this.id);
	var delay = this.delay[this.ctr];
    if ( el && typeof el.innerHTML != "undefined" ) {
        el.innerHTML = this.items[this.ctr];
		this.ctr = this.ctr + 1;
        if (this.ctr >= this.items.length-1) this.ctr = this.ctr - this.items.length;
        //else this.ctr = 0;
        this.timer = setTimeout(this.animString + ".rotate_in_order()", delay);
    }
};

index_Image.rotate_in_order = function() {
    var curObj = index_Images[this.id];
    clearTimeout(curObj.timer); curObj.timer = null;
		curObj.ctr = curObj.ctr + 1;
    if (curObj.ctr >= curObj.items.length-1) 
      curObj.ctr = 0;
    curObj.timer = setTimeout(curObj.animString + ".rotate_in_order()", 500);
};

index_Image.setMouseEvents = function(id) {
    var el = document.getElementById(id);
    var curObj = index_Images[this.id];
    if (el) {
        //el.onclick = index_Image.rotate_in_order;
        //el.onmouseover = index_Image.pause;
        el.onmouseout = index_Image.resume;
        el.onclick = index_Image.resume;
    }
};

// these 2 functions called onmouseover/out of image el
index_Image.pause = function() { 
    var curObj = index_Images[this.id];
    if (curObj) { clearTimeout(curObj.timer); curObj.timer = null; }
};
 
index_Image.resume = function(e) {
    e = e? e: window.event;
    var toEl = e.relatedTarget? e.relatedTarget: e.toElement;
    if ( this != toEl && !index_contained(toEl, this) ) {
        var curObj = index_Images[this.id];
        if (curObj)
            curObj.timer = setTimeout(curObj.animString + ".rotate_in_order()", index_Image.restartDelay);
    }
};

// returns true of oNode is contained by oCont (container)
function index_contained(oNode, oCont) {
    if (!oNode) return; // in case alt-tab away while hovering (prevent error)
    while ( oNode = oNode.parentNode ) if ( oNode == oCont ) return true;
    return false;
};

var imageHandler = { 
    path:"", imgs:[], preload:function() { for(var i=0;arguments[i];i++) {
    var img=new Image(); img.src=this.path+arguments[i]; this.imgs[this.imgs.length]=img;}}
};
