
//
// So we can work in both ie &  ff pass in rather than using globals
var sequenceNumber;
var timings;
var sequence;
var loop;
var nocache;
var currentTimer;
var videoIE;
var noCopy;
var operaWinFix;
var manual;
var start, end;
var first;

function setSequence( seq, tim, lp, nc ) {
	sequence = seq;
	timings = tim;
	sequenceNumber = 0;
	loop = lp;
	nocache = nc;
	videoIE = 0;
	noCopy = 0;
	operaWinFix = 0;
	manual = 0;
	start = 0;
	end = 24;
	first = true;

	// ignore the timings, unless it's a video
	for (var i=0; i < sequence.length; i++) {
		if( ! gObj( sequence[ i ] + "player" ) && timings[i] > 6 ) {
			timings[i] = 6;
		}
	}

   if(navigator.appName.indexOf("Microsoft") != -1 || navigator.userAgent.indexOf("Netscape") != -1 || navigator.userAgent.indexOf("Opera") != -1 ) {
	   videoIE = 1;
   }
   
   if( navigator.userAgent.indexOf("Netscape") != -1 ) {
	   noCopy = 1;
   }

   if( navigator.userAgent.indexOf("Opera") != -1 && navigator.userAgent.indexOf("Windows") != -1 ) {
	   operaWinFix = 1;
   }

   // if the first object is a video then let it play
   if( gObj( sequence[ sequenceNumber ] + "player" )) {
	   //   	   document.getElementById("ttl").innerHTML = navigator.userAgent;
	   if( videoIE && timings[ sequenceNumber ] > 0 ) {
		   currentTimer = window.setTimeout("fadeOut(\'"+sequence[0]+"image\',40)", timings[ sequenceNumber ] * 1000);
	   }
	}
	else {
		// otherwise we need to fade it in
		fadeIn( sequence[ sequenceNumber ], 40 );
	}
}

function setWebcamTimer( id, _start, _end ) {
	sequence = [ id ];
	timings = [ 600 ];
	sequenceNumber = 0;
	loop = true;
	nocache = true;
	start = _start;
	end = _end;
	first = 0;
	forcerelaod();
	fadeIn( id,50);
}


function gObj(movieName) {
	return document.getElementById( movieName );
}

// check to see if we have finished playing - if yes then we
// need to move to the next sequence item
function getUpdate(typ,pr1,pr2) {
	if( !operaWinFix && typ == "state" ) {
        if( pr1 == 0 ) {
			// start the next image loding
			var nseqn = (sequenceNumber + 1) % sequence.length;
			document.getElementById( sequence[ nseqn ]+"image" ).src = "/images/" + sequence[ nseqn ] + ".jpg";
			
           gObj(sequence[sequenceNumber] + "player").className = "hidden";
		   gObj(sequence[sequenceNumber] + "image").className="normal";
		   fadeOut( sequence[sequenceNumber] + 'image',40);
       	}
	}
}

function setOpacity(obj, opacity) {
	var op = (opacity == 100)?99.999:opacity;

	// IE/Win
    if(navigator.appName.indexOf("Microsoft") != -1) {
		obj.style.filter = "alpha(opacity:"+op+")";
	}

	// Safari less than 1.2, Konqueror
	if( obj.style.KHTMLOpacity ) {
		obj.style.KHTMLOpacity = op/100;
	}

	// Older Mozilla and Firefox
	obj.style.MozOpacity = op/100;

	// Safari 1.2, newer Firefox and Mozilla, CSS3
	obj.style.opacity = op/100;
}

function fadeIn(objn,opacity) {
		
	if (document.getElementById) {
		var obj = document.getElementById(objn);
		if (opacity <= 100) {
			setOpacity(obj, opacity);
			opacity += 20;
			currentTimer = window.setTimeout("fadeIn(\'"+objn+"\',"+opacity+")", 100);
		}
		else {
			// Set us to fully visible, helps with anchors on the captions
			obj.className = 'normal';

			if( !noCopy && document.getElementById(objn+"_cpyr") ) {
				document.getElementById(objn+"_cpyr").style.display = 'block';
			}
			
			// if it is faded in then we need to schedule a fadeout for the delay
			// if it has no delay then leave it on the screen
			if( manual ) {
			}
			else if( timings[ sequenceNumber ] > 0 ) {

				// speed up the first one...
				if( first ) {
					currentTimer = window.setTimeout("fadeOut(\'"+objn+"\',40)", 4000);
					first = false;
				} else {
					currentTimer = window.setTimeout("fadeOut(\'"+objn+"\',40)", timings[ sequenceNumber ] * 1000);
				}

				// start the next image loding
				var nseqn = (sequenceNumber + 1) % sequence.length;

				// for cached images we'll load it before this one is displaying to give it as
				// long as possible to load before needing to be displayed.  For non-cached, it'll
				// get loaded when the fadeOut first gets called
				if( ! nocache ) {
					document.getElementById( sequence[ nseqn ]+"image" ).src = "/images/" + sequence[ nseqn ] + ".jpg";
				}
				
			} else {
				
				// if it's a movie so we need to start it...
				if( gObj(sequence[sequenceNumber] + "player") ) {

					if( videoIE ) {
						gObj(sequence[sequenceNumber] + "player").className = "normal";
						gObj(sequence[sequenceNumber] + "image").className="hidden";
						gObj( sequence[ sequenceNumber ] + "player" ).sendEvent( 'playpause' );
					}
				}

				// otherwise it's a  noop
			}
		}
		
			
	} else {
		alert( "unable to find " + objn );
	}

}

// force a webcam image to reload, but only if it is within the range of times
function forcerelaod()
{
	var now = new Date;
	var obj = document.getElementById( sequence[ sequenceNumber ]+ "image" );
									   
	if(  now.getUTCHours() >= start && now.getUTCHours() < end ) {
		// check the date range 
		// start the next image loding
		//		var nseqn = (sequenceNumber + 1) % sequence.length;
		
		// make sure we don't cache if it says don't cache
		obj.src = "/images/" + sequence[ sequenceNumber ] + ".jpg?" + Math.random() * 1000;
	} else	{
		if( obj.src != "/images/notrefreshing.jpg" ) {
			obj.src = "/images/notrefreshing.jpg";
		}
	}
		
}


function fadeOut(objn,opacity) {
	if (document.getElementById) {

		if( gObj( sequence[ sequenceNumber ] + "player" ) ) {
	        gObj(sequence[sequenceNumber] + "player").className = "hidden";
		    gObj(sequence[sequenceNumber] + "image").className="hidden";
			opacity = -10;
		}

		// make sure we don't cache if it says don't cache
		if( opacity == 40 && nocache ) {
			forcerelaod();
		}
		
		obj = document.getElementById(objn);
		if (opacity >= 0) {
			setOpacity(obj, opacity);
			opacity -= 10;
			currentTimer = window.setTimeout("fadeOut(\'"+objn+"\',"+opacity+")", 150 );
		} else {
			
			if( obj.className != 'hidden' ) {
				obj.className = 'faded';
			}

			if( !noCopy && document.getElementById(objn+"_cpyr") ) {
				document.getElementById(objn+"_cpyr").style.display = 'none';
			}
			
			sequenceNumber++;

			// next item in the sequence needs to be done now
			if( sequenceNumber >= sequence.length && loop ) {
				sequenceNumber = 0;
			}

			// if we have one then we will fade it in
			if( sequenceNumber < sequence.length ) {
				fadeIn( sequence[ sequenceNumber ],20);
			}
					
		}
	}
}

// helper function for the webcam
function reload( objn ) {
	clearTimeout( currentTimer );
	fadeOut( objn, 40 );
}

function clearfade() {
	clearTimeout( currentTimer );

	// get rid of last one
	var objn= sequence[sequenceNumber];
	obj = document.getElementById(objn);
	if( obj ) {
		setOpacity(obj, 0);
		
		if( obj.className != 'hidden' ) {
			obj.className = 'faded';
		}
		
		if( !noCopy && document.getElementById(objn+"_cpyr") ) {
			document.getElementById(objn+"_cpyr").style.display = 'none';
		}
	}

	// turn off the animated spinners
	for (var i=0; i < sequence.length; i++) {
		if( gObj( "anim_" + sequence[ i ]  ) ) {
			gObj("anim_" + sequence[i]).style.display = 'none';
		}
	}
	
	manual = 1;
}

function show() {
	if( document.getElementById( sequence[ sequenceNumber ]+"image" ).src.indexOf("blank.gif") != -1 ) {
		document.getElementById( sequence[ sequenceNumber ]+"image" ).src = "/images/" + sequence[ sequenceNumber ] + ".jpg";
		currentTimer = window.setTimeout("fadeIn(\'"+sequence[ sequenceNumber ]+"\',50)", 400);
	} else {
		fadeIn( sequence[ sequenceNumber ],50);
	}
}

function stopfade() {
	clearTimeout( currentTimer );
	
	// turn off the animated spinners
	if( gObj( "anim_" + sequence[ sequenceNumber ]  ) ) {
		gObj("anim_" + sequence[sequenceNumber]).style.display = 'none';
	}
	fadeIn( sequence[ sequenceNumber ],100);
}

function previous() {
	clearfade();
	sequenceNumber--;

	// next item in the sequence needs to be done now
	if( sequenceNumber < 0  ) {
		sequenceNumber = sequence.length -1 ;
	}

	show();
}

function next() {
	clearfade();

	sequenceNumber++;
	
	// next item in the sequence needs to be done now
	if( sequenceNumber >= sequence.length && loop ) {
		sequenceNumber = 0;
	}
	
	show();
}

function mouseover( toselect ) {
	clearfade();

	// next item in the sequence needs to be done now
	for( sequenceNumber = 0; sequenceNumber < sequence.length; sequenceNumber++ ) {

		if( sequence[sequenceNumber] == toselect ) {
			break;
		}
	}

	if( sequenceNumber < sequence.length )
		show();
}

