/* network cyclomatic
 * complete with unnessesary inheritence!
 */

var isMSIE = /*@cc_on!@*/false;
 
displayNoneId = function(objId) {
    document.getElementById(objId).style.display = "none";
};


function Cyclo() {
    this.IMAGE_ID_PREFIX        = "lom-lead";
    this.IMAGE_CAPTION_PREFIX   = "lom-caption";
    this.CONTROLS               = "cyclo-index";
    this.THUMB_ID_PREFIX        = null;
    this.BACKGROUND_CONTAINER   = "lead-group";
    this.THUMBS_CONTAINER       = null;
    this.AREA_CONTAINER         = "lead-group";
    this.NEXT_ID                = "lomnext";
    this.PREV_ID                = "lomprev";
    this.BUTTONS_ID             = null;
    this.IMAGE_WIDTH            = 0;
    this.IMAGE_MAX              = 0;
    this.imagePos               = 0;
    this.currentTimeout         = 0;
    this.imageSwitchTimeout     = 0;
    this.timeoutMutex           = 0;
    this.toFade                 = 0;
    this.toDisplay              = 0;
    this.toHighlight            = 0;
    this.toUnHighlight          = 0;
    this.toCaption              = 0;
    this.toUnCaption            = 0;
    this.prevImageSrc           = 0;
    this.isLocked               = false;
    this.cycloIndex             = null; 
    this.transitionType         = null;
    this.SINGLE_CAPTION         = null;
	this.CONTENT_BLOCKS			= null;
}


Cyclo.prototype.loop = function() {
    // mutex
    if(this.timeoutMutex == 0) {
        clearTimeout(this.currentTimeout);
        this.next(false);
        var relayOwner = this;
        clearInterval(this.imageSwitchTimeout);
        this.setStatusImage(true);
        this.currentTimeout = window.setTimeout(function() { relayOwner.loop(); }, 6000);
        this.imageSwitchTimeout = window.setInterval(function() {relayOwner.setStatusImage(false)}, 1000);
    }
    return(true); 
}

Cyclo.prototype.setStatusImage = function(doReset) {
    if(this.hasImageTimer) {
        ++this.currentTimerImage;
        if( (doReset) || (this.currentTimerImage === 7) ) {
            this.currentTimerImage = 0;
        }
        document.getElementById("image-timer").style.backgroundPosition = "0 -"+17*this.currentTimerImage+"px";
    }

}

Cyclo.prototype.start = function(unlock) {
    if(unlock) {
        this.isLocked = false;
    }
    
    if(!this.isLocked) {
        this.timeoutMutex = 0;
        clearTimeout(this.currentTimeout);
        var relayOwner = this;
        clearInterval(this.imageSwitchTimeout);
        this.setStatusImage(true);
        this.currentTimeout = window.setTimeout(function() {relayOwner.loop(); }, 6000);
        this.imageSwitchTimeout = window.setInterval(function() {relayOwner.setStatusImage(false)}, 1000)
    }
    return(true);
}


Cyclo.prototype.stop = function(lock) {
    this.timeoutMutex = 1;
    clearTimeout(this.currentTimeout);
    clearInterval(this.imageSwitchTimeout);
    
    if(lock) {
        this.isLocked = true;
    }
};


setOpacity = function(obj, opacity) {
    opacity = (opacity == 100)?99.999:opacity;
    // IE/Win
    obj.style.filter = "alpha(opacity:"+opacity+")";
    // Safari<1.2, Konqueror
    obj.style.KHTMLOpacity = opacity/100;
    // Older Mozilla and Firefox
    obj.style.MozOpacity = opacity/100;
    // Safari 1.2, newer Firefox and Mozilla, CSS3
    obj.style.opacity = opacity/100;
};


fadeIn = function(objId,opacity,amount) {
    if (document.getElementById) {
        // see if we have tweening lib available
       if(typeof(OpacityTween) != "undefined") {
           fadeObj = document.getElementById(objId); 
           // check desired transition
           var opacityTween = new OpacityTween(fadeObj,Tween.regularEaseIn,0,100,1);
           opacityTween.start();
        } else {
            obj = document.getElementById(objId);
            if (opacity <= 99.999) {
                if(opacity < 50) {
                amount = amount*1.2;
                } else {
                    amount = amount/1.2;
                }
                setOpacity(obj, opacity);
                opacity += amount;
                this.faderTimeout = window.setTimeout("fadeIn('"+objId+"',"+opacity+","+amount+")", 8);
            } else {
                setOpacity(obj, 100);
                clearTimeout(this.faderTimeout);
            }
        }
    }
};

Cyclo.prototype.jump = function(position, immediate) {
	clearTimeout(this.currentTimeout);
    this.toFade = this.IMAGE_ID_PREFIX + this.imagePos;
    if(this.IMAGE_CAPTION_PREFIX != null) { 
        this.toUnCaption = this.IMAGE_CAPTION_PREFIX + this.imagePos;
    }
    if(this.THUMB_ID_PREFIX != null) {
        this.toUnHighlight = this.THUMB_ID_PREFIX + this.imagePos;
    }
    this.prevImageSrc = document.getElementById(this.toFade).getAttribute("src");
    this.backgroundElement.style.backgroundImage = "url("+this.prevImageSrc+")";
    document.getElementById(this.toFade).style.display = "none";

    var bckwrds = false;
    if(position > this.imagePos) {
        bckwrds = true;
    }
    if((position == 0) && (this.imagePos == this.IMAGE_MAX)) {
        bckwrds = true;
    }
    if((position == this.IMAGE_MAX) && (this.imagePos == 0)) {
        bckwrds = false;
    }

    // set new image
    this.imagePos = position;
	
    // fade or switch image
    this.toDisplay = this.IMAGE_ID_PREFIX + this.imagePos;
    if(this.IMAGE_CAPTION_PREFIX != null) { 
        this.toCaption = this.IMAGE_CAPTION_PREFIX + this.imagePos;
    }
    
    if(this.THUMB_ID_PREFIX != null) {
        this.toHighlight = this.THUMB_ID_PREFIX + this.imagePos;
    }

    if(immediate) {
        setOpacity((document.getElementById(this.toDisplay)), 100);
        document.getElementById(this.toDisplay).style.display = "block";
    } else {
        this.prevImageSrc = document.getElementById(this.toDisplay).getAttribute("src");
        this.backgroundElement.style.backgroundImage = "url("+this.prevImageSrc+")";
		
		/* link image through to corresponding story */
		if(document.getElementById("lead-pic-link")) {
            var newLink = "#";
            var idToGrab = "home" + this.imagePos;
			if(!(document.getElementById(idToGrab))) {
			    idToGrab = "home0";
			}
            if(document.getElementById(idToGrab).childNodes[0].nodeName == "A") {
                newLink = document.getElementById(idToGrab).childNodes[0].cloneNode(false);
            } else {
				newLink = document.createElement('A');
                newLink.href += idToGrab;
            }
			
			if(isMSIE) {
				var lpic = document.getElementById("lead-pic");
				lpic.style.cursor = "pointer";
				lpic.onmouseover = function() {
				    window.status = document.getElementById(idToGrab).getAttribute("href");
				}
				lpic.onmouseout = function() {
					window.status = "";
				}
				
				var etg = document.getElementById(idToGrab);
				if(typeof etg.onclick != "undefined") {
					lpic.onclick = function() {
					    etg.onclick.call(etg);
						return false; 
					}
				} else { 
				    window.location = document.getElementById(idToGrab).href;
				}
			}
			
			var p = document.getElementById("lead-pic-link").parentNode;
			p.removeChild(document.getElementById("lead-pic-link"));
			newLink = p.appendChild(newLink);
			newLink.id = "lead-pic-link";
        }
        if(this.transition === "slide") {
		    document.getElementById(this.toFade).style.display = "block";
        	var imageToDisplay = document.getElementById(this.toDisplay);
        	var imageToKill = document.getElementById(this.toFade);
            this.isLocked = true;
            this.prevImageSrc = document.getElementById(this.toDisplay).getAttribute("src");
            if(bckwrds) {
                var myTween = new Tween(document.getElementById(this.toFade).style,'right', Tween.regularEaseOut,0,427,1,'px');
                var myTweenBG = new Tween(document.getElementById(this.toFade).parentNode.style,'backgroundPosition', Tween.regularEaseOut,0,-427,1,'px 0');
            } else {
                var myTween = new Tween(document.getElementById(this.toFade).style,'right', Tween.regularEaseOut,0,-427,1,'px');
                var myTweenBG = new Tween(document.getElementById(this.toFade).parentNode.style,'backgroundPosition', Tween.regularEaseOut,0,427,1,'px 0');
            }
            var relayOwner = this;
            myTween.onMotionFinished = function(){
                imageToDisplay.style.display = "block";
                imageToKill.style.display = "none";
                relayOwner.isLocked = false;
            };
            myTween.start();
            myTweenBG.start();
        } else {
		    this.prevImageSrc = document.getElementById(this.toFade).getAttribute("src");
            this.backgroundElement.style.backgroundImage = "url("+this.prevImageSrc+")";
        	document.getElementById(this.toDisplay).style.display = "block";
			
		    if(/*typeof(OpacityTween) != "undefined"*/false) {
		        var opacityTweenIn = new OpacityTween(imageToDisplay,Tween.regularEaseIn,0,100,1);
           	    opacityTweenIn.start();
				var relayOwner = this;
				opacityTweenIn.onMotionFinished = function() {
				    imageToDisplay.style.display = "block";
                    imageToKill.style.display = "none";
					relayOwner.isLocked = false;
				}
			} else {
			    setOpacity((document.getElementById(this.toDisplay)), 0);
	            fadeIn(this.toDisplay, 0, 2);
			}
        }
    }

    // switch caption
    if(this.IMAGE_CAPTION_PREFIX != null) {
        if(this.SINGLE_CAPTION != null) {
            document.getElementById(this.SINGLE_CAPTION).innerHTML = document.getElementById("lom-src"+position).getAttribute("title");
        }
        document.getElementById(this.toUnCaption).style.display = "none";
        document.getElementById(this.toCaption).style.display = "block";

    }

    if(this.THUMB_ID_PREFIX != null) {
        document.getElementById(this.toUnHighlight).className = document.getElementById(this.toHighlight).className.replace('active','');
        document.getElementById(this.toHighlight).className += ' active';
    }

    // set "image x of n" text
    if(this.cycloIndex != null) {
        this.cycloIndex.innerHTML = "Image "+(this.imagePos+1)+" of "+(this.IMAGE_MAX+1);
    }
    
    if(this.BUTTONS_ID != null) {
        var gallery = document.getElementById("buttons");
        var links = gallery.getElementsByTagName("a");
        for (var i = 0; i < links.length; i++) {
           links[i].className = "";
           if(i == this.imagePos) {
               links[i].className = "button-on";
           }
        }
    }
       
};


Cyclo.prototype.next = function(immediate) {
    if(this.imagePos == this.IMAGE_MAX) { 
        this.jump(0, immediate); 
    } else {
        this.jump(this.imagePos+1, immediate);
    }
};

Cyclo.prototype.previous = function(immediate) {
    if(this.imagePos == 0) { 
            this.jump(this.IMAGE_MAX, immediate); 
        } else {
            this.jump(this.imagePos-1, immediate);
    }
};


Cyclo.prototype.init = function(transitionType) {
    this.transition = transitionType;
    // get image count and set id's
    var root = document.getElementById(this.BACKGROUND_CONTAINER);
    for(var i = 0; i != root.childNodes.length; i++) { 
        if(root.childNodes[i].nodeName === "IMG") {
            root.childNodes[i].style.position = "absolute";
            root.childNodes[i].style.display = "none";
            root.childNodes[i].id = this.IMAGE_ID_PREFIX + this.IMAGE_MAX;
            ++(this.IMAGE_MAX);
        }
    }
    --(this.IMAGE_MAX);
    document.getElementById(this.IMAGE_ID_PREFIX+"0").style.display = "block";

    if(this.THUMBS_CONTAINER != null){
        root = document.getElementById(this.THUMBS_CONTAINER);
        var n = 0;
        for(var i = 0; i != root.childNodes.length; i++) { 
            if(root.childNodes[i].nodeName === "IMG") {
                root.childNodes[i].id = this.THUMB_ID_PREFIX + n;
                root.childNodes[i].style.cursor = "pointer";
                var relayOwner = this;
                root.childNodes[i].onclick = function() {
                    relayOwner.jump(parseInt(this.id.replace(relayOwner.THUMB_ID_PREFIX, "")), true);
                }
                ++n;
            }
        }
    }
    /*init page controls */
    if(this.CONTROLS != null) {
        this.cycloIndex = document.getElementById(this.CONTROLS);
        this.cycloIndex.style.display = "block";
        this.cycloIndex.innerHTML = "Image "+(this.imagePos+1)+" of "+(this.IMAGE_MAX+1);
    }
    if(document.getElementById(this.PREV_ID)) {
        document.getElementById(this.PREV_ID).owner = this;
        document.getElementById(this.PREV_ID).onclick = function() {
            this.owner.stop();
            this.owner.previous(true);
            this.owner.start();
            return false;
        };
    }
    if(document.getElementById(this.NEXT_ID)) {
        document.getElementById(this.NEXT_ID).owner = this;
        document.getElementById(this.NEXT_ID).onclick = function() {
            this.owner.stop();
            this.owner.next(true);
            this.owner.start();
            return false;
        };
    }
    
    this.backgroundElement = document.getElementById(this.BACKGROUND_CONTAINER);
    this.areaElement = document.getElementById(this.AREA_CONTAINER);
    
    this.areaElement.owner = this;
    
    this.areaElement.onmouseover = function() {
        this.owner.stop();
        this.onkeypress = function(event) {
            if(event.keyCode != null) {
                if(event.keyCode == 37) {
                    this.owner.previous(true);
                } else if(event.keyCode == 39) {
                    this.owner.next(true);
                }
            }
        }   
    };
    
    this.areaElement.onmouseout = function() {
        this.owner.start();
        this.onkeypress = null;
    };
    
    // Finally, start
    this.start();
};


/* custom stuff for foxsports */
FoxCyclo.prototype = new Cyclo();

FoxCyclo.prototype.constructor = FoxCyclo;


function FoxCyclo() {
    this.IMAGE_ID_PREFIX =          "placeholder";
    this.IMAGE_CAPTION_PREFIX =     "lom-block";
    this.BACKGROUND_CONTAINER =     "placeholder-bg";
    this.LINK_SRC_PREFIX =          "lom-src";
    this.AREA_CONTAINER =           "weekend";
    this.PAUSE_ID =                 "pause";
    this.SINGLE_CAPTION =           "caption";
    this.BUTTONS_ID =               "buttons";
    this.NEXT_ID =                  null;
    this.PREV_ID =                  null;
    this.CONTROLS =                 null;
    this.currentImg =               "";
    this.imageSwitchTimeout =       0;
    this.hasImageTimer =            true;
    this.currentTimerImage =        "0";
	this.CONTENT_BLOCKS = 			true;
    
    // image index
    var g = document.getElementById("buttons");
    var l = g.getElementsByTagName("a");
    
    // setup so that the standard init() works
    var root = document.getElementById("placeholder-bg");
    var dlRoot = document.getElementById("buttons");
    var n = 0;
    for(var i = 0; i != dlRoot.childNodes.length; i++) { 
        if(dlRoot.childNodes[i].nodeName === "DD") {
            var newImg = document.createElement("img");
            newImg.setAttribute("src", dlRoot.childNodes[i].childNodes[0].getAttribute("href"));
            newImg.setAttribute("alt", dlRoot.childNodes[i].childNodes[0].getAttribute("title"));
            root.appendChild(newImg);
            n++;
        }
    }
    
    /* cruft to dump href "around" div */
    var lp = document.getElementById("lead-pic");
	var lpl = document.createElement('A');
    lpl.href = "#home0";
		
    if(document.getElementById("home0").childNodes[0].nodeName == "A") {
        var lpl = document.getElementById("home0").childNodes[0].cloneNode(false);
		lpl.id = "lead-pic-link";
		
    } else if(document.getElementById("home0").childNodes[1]) {
        if(document.getElementById("home0").childNodes[1].nodeName == "A") {
            var lpl = document.getElementById("home0").childNodes[1].cloneNode(false);
			lpl.id = "lead-pic-link";
        }
	}
	
	if(isMSIE) {
		var lpic = document.getElementById("lead-pic");
		lpic.style.cursor = "pointer";
		lpic.onmouseover = function() {
		    window.status = lpl.href;
		}
		lpic.onmouseout = function() {
			window.status = "";
		}
		if(typeof lpl.onclick != "undefined") {
			lpic.onclick = function() {
			    lpl.onclick.call(lpl);
				return false;
			}
		} else { 
		    window.location = lpl.href;
		}
	}
	
    var lpla = lp.appendChild(lpl);
	lpla.id = "lead-pic-link";
    document.getElementById(this.IMAGE_ID_PREFIX).parentNode.removeChild(document.getElementById(this.IMAGE_ID_PREFIX));
    // gallery buttons onclick
	
	// check to see if it's only an image
	if(!(/image-only/.test(document.getElementById(this.AREA_CONTAINER).className))) {
	    var gallery = document.getElementById("buttons");
	    gallery.owner = this;
	    var links = gallery.getElementsByTagName("a");
	    for (var i = 0; i < links.length; i++) {
	        links[i].owner = this;
	        links[i].num = i;
	        links[i].onclick = function() {
	            if(this.owner.isLocked === true) {
	                return false;
	            }
	            var newCaption = this.getAttribute("title");
	            var gallery = document.getElementById("buttons");
	            var links = gallery.getElementsByTagName("a");
	            for (var i = 0; i < links.length; i++) {
	               links[i].className = "";
	            }
	            this.owner.stop(false);
	            this.owner.jump(this.num, false);
	            this.owner.start(false);
	            this.className = "button-on";
	            return false;
	        };
	        
	    }
		
		var pauseElem = document.getElementById("pause");
	    var timerImg = document.createElement("div");
		timerImg.style.right = ((links.length)*20 + 22) + "px";
	    timerImg.id = "image-timer";
	    pauseElem.parentNode.insertBefore(timerImg, pauseElem);
	    
	    // pause gallery onclick
	    var pauseButton = document.getElementById("pause-button");
	    pauseButton.owner = this;
	    pauseButton.isActive = false;
	    pauseButton.onclick = function() {
	        var pause = document.getElementById("pause");
	        if(this.isActive) {
	            this.owner.start(true);
	            // dunno 'bout these class names!
	            pause.className = "stop";
	            this.isActive = false;
	        } else {
	            this.owner.stop(true);
	            pause.className = "play";
	            this.isActive = true;
	        }
	        return false;
	    };
	      
	    // init buttons
	    var controls = document.getElementById("gallery-controls");
	    if (controls != null) {
	        controls.style.display = "block";
	        links[0].className = "button-on";
	        var pause = document.getElementById("pause");
	        pause.className = "stop";
	    }   
		
	} else {
	    if(document.getElementById("pause-button")) {
	    	document.getElementById("pause-button").style.display = "none";
		}
		this.hasImageTimer = false;
	}
     
}


/* match version cyclo */
MatchCyclomatic.prototype = new Cyclo();

MatchCyclomatic.constructor = MatchCyclomatic;

function MatchCyclomatic() {
    this.BACKGROUND_CONTAINER   = "match-fader";
    this.AREA_CONTAINER         = "match-fader";
    this.THUMBS_CONTAINER       = null;
    this.THUMB_ID_PREFIX        = null;
    this.NEXT_ID                = null;
    this.PREV_ID                = null;
	this.CONTENT_BLOCKS		    = null;
}


/* foxsports "normal" image cycler */
FoxCycloSimple.prototype = new Cyclo();

FoxCycloSimple.constructor = FoxCycloSimple;
function FoxCycloSimple() {
    this.IMAGE_ID_PREFIX        = "lom-lead";
    this.IMAGE_CAPTION_PREFIX   = "lom-caption";
    this.CONTROLS               = null;
    this.THUMB_ID_PREFIX        = null;
    this.BACKGROUND_CONTAINER   = "lead-link";
    this.THUMBS_CONTAINER       = null;
    this.AREA_CONTAINER         = "lead-link";
    this.NEXT_ID                = null;
    this.PREV_ID                = null;
    this.BUTTONS_ID             = null;
    this.IMAGE_WIDTH            = 0;
    this.IMAGE_MAX              = 0;
    this.imagePos               = 0;
    this.currentTimeout         = 0;
    this.imageSwitchTimeout     = 0;
    this.timeoutMutex           = 0;
    this.toFade                 = 0;
    this.toDisplay              = 0;
    this.toHighlight            = 0;
    this.toUnHighlight          = 0;
    this.toCaption              = 0;
    this.toUnCaption            = 0;
    this.prevImageSrc           = 0;
    this.isLocked               = false;
    this.cycloIndex             = null; 
    this.transitionType         = null;
    this.SINGLE_CAPTION          = null;
	this.CONTENT_BLOCKS			= null;
	
	document.getElementById("lead-pic").className += " dyno";
}

